본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch12 java.base 모듈(Object 클래스)

728x90
반응형

1. API 도큐먼트

   ▷ 자바 표준 모듈에서 제공하는 라이브러리를 쉽게 찾아서 사용할 수 있도록 도와주는 문서

   ▷ JDK 버전별로 사용할 수 있는 API 도큐먼트 사이트

      ▶ https://docs.oracle.com/en/java/javase/index.html

 

Java Platform, Standard Edition Documentation - Releases

Java Platform, Standard Edition documentation, current and previous releases

docs.oracle.com

 

2. java.base 모듈

   ▷ 모든 모듈이 의존하는 기본 모듈 의존하는 기본 모듈로, 모듈 중 유일하게 requires 하지 않아도 사용할 수 있습니다.

 

NO 패키지 용도
1 java.lang 자바 언어의 기본 클래스 제공
2 java.util 자료 구조와 관련된 컬렉션 클래스를 제공
3 java.text 날짜 및 숫자를 원하는 형태의 문자열로 만들어 주는 포맷 클래스를 제공
4 java.time 날짜 및 시간을 조작하거나 연산하는 클래스를 제공
5 java.io 입출력 스트림 클래스를 제공
6 java.net 네트워크 통신과 관련된 클래스를 제공
7 java.nio 데이터 저장을 위한 Buffer 및 새로운 입출력 클래스 제공

 

(1) java.lang

   ▷ 자바 언어의 기본적인 클래스를 담고 있는 패키지.

   ▷ 이 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있습니다.

 

 

 

◎ Object 클래스

   ▷ 클래스를 선언할 때 extends 키워들로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속

      ▶ 자바의 모든 클래스는 Object의 자식이거나 자손 클래스

 


1. 객체 동등 비교
   ▷ Object의 equals() 메소드는 객체의 번지를 비교하고 boolean 값을 리턴

public boolean equals(Object obj)



2. 객체 해시코드
   ▷ 객체를 식별하는 정수. Object의 hashCode() 메소드는 객체의 메모리 번지를 이용해서 해시코드를 생성하기 때문에 객체마다 다른 정수값을 리턴합니다.

public int hashCode()


   ▷ hashCode()가 리턴하는 정수 값이 같은지 확인하고, equals() 메소드가 true를 리턴하는지 확인해서 동등 객체임을 판단합니다.



3. 객체 문자 정보
   ▷ 객체를 문자열로 표현한 값. Object의 toString() 메소드는 객체의 문자 정보를 리턴합니다.
   ▷ 기본적으로 Objcet의 toString() 메소드는 '클래스명@16진수해시코드'로 구성된 문자열을 리턴

Object obj = new Objcet(); System.out.println(obj.toString()); // java.lang.Object@de6ced



4. 레코드 선언
   ▷ 데이터 전달을 위한 DTO(Data Transfer Object) 작성시 반복적으로 사용되는 코드를 줄이기 위해 도입

 

 

◎ 객체 동등 비교 예시

1. Member 클래스
public class Member { ​​​​public String id; ​​​​ ​​​​public Member(String id) { ​​​​​​​​this.id = id; ​​​​} ​​​​ ​​​​@Override ​​​​public boolean equals(Object obj) { ​​​​​​​​if(obj instanceof Member target) { ​​​​​​​​​​​​if(id.equals(target.id)) { ​​​​​​​​​​​​​​​​return true; ​​​​​​​​​​​​} ​​​​​​​​} ​​​​​​​​return false; ​​​​} }


▷ obj와 Member가 같은 클래스이면 true를 출력합니다. (instanceof 함수)
   ▶ obj와 Member가 같은 클래스이면 obj를 Member로 강제 형 변환해서 target에 대입합니다.
 
▷ 그리고 id가 target.id랑 같으면 true를 출력합니다.
▷ 함수는 한 번 return을 받으면 그대로 실행이 종료됩니다.



2. EqualsExample 메인 클래스

public class EqualsExample { ​​​​ ​​​​public static void main(String[] args) { ​​​​​​​​Member obj1 = new Member("blue"); ​​​​​​​​Member obj2 = new Member("blue"); ​​​​​​​​Member obj3 = new Member("red"); ​​​​​​​​ ​​​​​​​​if(obj1.equals(obj2)) { ​​​​​​​​​​​​System.out.println("obj1과 obj2는 동등합니다."); ​​​​​​​​} else { ​​​​​​​​​​​​System.out.println("obj1과 obj2는 동등하지 않습니다."); ​​​​​​​​} ​​​​​​​​ ​​​​​​​​if(obj1.equals(obj3)) { ​​​​​​​​​​​​System.out.println("obj1과 obj3는 동등합니다."); ​​​​​​​​} else { ​​​​​​​​​​​​System.out.println("obj1과 obj3는 동등하지 않습니다."); ​​​​​​​​} ​​​​} } // 출력 : // obj1과 obj2는 동등합니다. // obj1과 obj3는 동등하지 않습니다.

 

 

◎ 객체 해시코드 예시

1. Student 클래스
public class Student { ​​​​private int no; ​​​​private String name; ​​​​ ​​​​public Student(int no, String name) { ​​​​​​​​this.no = no; ​​​​​​​​this.name = name; ​​​​} ​​​​ ​​​​public int getNo() { return no; } ​​​​public String getName() { return name; } ​​​​ ​​​​@Override ​​​​public int hashCode() { ​​​​​​​​int hashCode = no + name.hashCode(); ​​​​​​​​return hashCode; ​​​​} ​​​​ ​​​​@Override ​​​​public boolean equals(Object obj) { ​​​​​​​​if(obj instanceof Student) { ​​​​​​​​​​​​Student target = (Student) obj; ​​​​​​​​​​​​if(no == target.getNo() && name.equals(target.getName())) { ​​​​​​​​​​​​​​​​return true; ​​​​​​​​​​​​} ​​​​​​​​} ​​​​​​​​return false; ​​​​} }


▷ equals는 원래 문자열 비교지만 클래스를 비교할 수 있도록 오버라이딩을 시켜줍니다.

2. HashCodeExample 메인 클래스
public class HashCodeExample { ​​​​public static void main(String[] args) { ​​​​​​​​Student s1 = new Student(1, "홍길동"); ​​​​​​​​Student s2 = new Student(1, "홍길동"); ​​​​​​​​ ​​​​​​​​System.out.println(s1); ​​​​​​​​System.out.println(s2); ​​​​​​​​ ​​​​​​​​System.out.println(s1.hashCode()); ​​​​​​​​System.out.println(s2.hashCode()); ​​​​​​​​ ​​​​​​​​if(s1.hashCode() == s2.hashCode()) { ​​​​​​​​​​​​if(s1.equals(s2)) { ​​​​​​​​​​​​​​​​System.out.println("동등 객체입니다."); ​​​​​​​​​​​​} else { ​​​​​​​​​​​​​​​​System.out.println("데이터가 다르므로 동등 객체가 아닙니다."); ​​​​​​​​​​​​} ​​​​​​​​} else { ​​​​​​​​​​​​System.out.println("해시코드가 다르므로 동등 객체가 아닙니다."); ​​​​​​​​} ​​​​} } // 출력 : // hash.Student@33a43af // hash.Student@33a43af // 54150063 // 54150063 // 동등 객체입니다.


▷ s1와 s2는 해쉬코드가 같은 값이지만 실제 주소는 다릅니다.
   ▶ 그 이유는 new를 통해서 새로운 객체를 생성한 것이기 때문입니다.

 if(s1 == s2) 을 하면 주소 값을 비교할 수 있습니다.

 

◎ HashSet을 이용한 예제

package java0119; import java.util.HashSet; public class HashSetExample { ​​​​public static void main(String[] args) { ​​​​​​​​HashSet hashSet = new HashSet(); ​​​​​​​​ ​​​​​​​​Student s1 = new Student(1, "홍길동"); ​​​​​​​​hashSet.add(s1); ​​​​​​​​System.out.println("저장된 객체 수 : " + hashSet.size()); ​​​​​​​​ ​​​​​​​​Student s2 = new Student(1, "홍길동"); ​​​​​​​​hashSet.add(s2); ​​​​​​​​System.out.println("저장된 객체 수 : " + hashSet.size()); ​​​​​​​​ ​​​​​​​​Student s3 = new Student(2, "홍길동"); ​​​​​​​​hashSet.add(s3); ​​​​​​​​System.out.println("저장된 객체 수 : " + hashSet.size()); ​​​​} } // 출력 : // 저장된 객체 수 : 1 // 저장된 객체 수 : 1 // 저장된 객체 수 : 2


▷ HashSet 클래스와 add를 통해서 HashSet 클래스에 Student 객체를 저장합니다.
 동등 객체는 중복 저장되지 않기때문에 총 3개를 저장했지만 결과는 2개만 출력됩니다. 

 

◎ 객체 문자 정보

1. SmartPhone 클래스
public class SmartPhone { ​​​​private String company; ​​​​private String os; ​​​​ ​​​​public SmartPhone(String company, String os) { ​​​​​​​​this.company = company; ​​​​​​​​this.os = os; ​​​​} ​​​​ ​​​​@Override ​​​​public String toString() { ​​​​​​​​return company + ", " + os; ​​​​} }


2. ToStringExample 메인 클래스
public class ToStringExample { ​​​​public static void main(String[] args) { ​​​​​​​​SmartPhone myPhone = new SmartPhone("삼성전자", "안드로이드"); ​​​​​​​​ ​​​​​​​​String strObj = myPhone.toString(); ​​​​​​​​System.out.println(strObj); ​​​​​​​​ ​​​​​​​​System.out.println(myPhone); ​​​​} } // 출력 : // 삼성전자, 안드로이드 // 삼성전자, 안드로이드​

 

◎ 레코드 선언

1. Member 레코드
public record Member(String id, String name, int age) { }


2. RecordExample 메인 클래스
public class RecordExample { ​​​​public static void main(String[] args) { ​​​​​​​​Member m = new Member("winter", "눈송이", 25); ​​​​​​​​System.out.println(m.id()); ​​​​​​​​System.out.println(m.name()); ​​​​​​​​System.out.println(m.age()); ​​​​​​​​System.out.println(m.toString()); ​​​​​​​​System.out.println(); ​​​​​​​​ ​​​​​​​​Member m1 = new Member("winter", "눈송이", 25); ​​​​​​​​Member m2 = new Member("winter", "눈송이", 25); ​​​​​​​​System.out.println("m1.hashCode() : " + m1.hashCode()); ​​​​​​​​System.out.println("m2.hashCode() : " + m2.hashCode()); ​​​​​​​​System.out.println("m1.equls(m2) : " + m1.equals(m2)); ​​​​} } // 출력 : // winter // 눈송이 // 25 // Member[id=winter, name=눈송이, age=25] // // m1.hashCode() : 306065155 // m2.hashCode() : 306065155 // m1.equls(m2) : true​

 

▷ java 14부터 레코드를 사용할 수 있습니다.
▷ record를 사용하면 자동으로 getter, setter를 생성해줍니다.

 

 java.lang의 class들에 대해서 익혀보았습니다.

 

많은 예제들을 보면서 java.lang에 어떤 클래스들이 있는지 어떻게 사용되는지 익히는 것이 중요한 것 같습니다!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형

'BackEnd > Java' 카테고리의 다른 글