1. java.lang 패키지
java.lang 패키지에는 프로그램에서 가장 많이 사용하는 기본 클래스가 포함되어있다. (String, Integer 등)
자바 프로그래밍에서 외부 패키지에 선언한 클래스를 사용할 때는 import 문으로 클래스가 어느 패키지에 속해 있는지 선언해야한다. 하지만 java.lang 패키지는 컴파일 시 자동으로 추가되기 때문에 import 문을 직접 쓰지 않아도 java.lang 패키지의 모든 하위 클래스를 참조할 수 있다.
2. 모든 클래스의 최상위 클래스 Object
Object 클래스는 모든 자바 클래스의 최상위 클래스다.
모든 클래스는 Object 클래스로부터 상속을 받는다. (컴파일 과정에서 자동으로 extends Object가 쓰임)
그러므로 모든 클래스는 Object의 메서드를 사용하고 재정의 할 수 있고 Object 형으로 변환할 수 있다.
<자주 재정의하여 사용하는 Object 메서드>
Object 클래스의 모든 클래스를 재정의할 수 있는 것은 아니다. (final 로 선언된 메서드는 재정의X)
String toString() | 객체를 문자열로 표현하여 반환 재정의) 객체에 대한 설명/특정 멤버 변수 값 반환 |
boolean equals(Object obj) | 두 인스턴스가 동일한지 여부를 반환 재정의) 논리적 동일한 인스턴스임을 정의 |
int hashCode() | 객체의 해시 코드 값 반환 |
Object clone() | 객체를 복제해 동일 멤버 변수 값을 가진 새로운 인스턴스를 생성 |
Class getClass() | 객체의 Class 클래스를 반환 |
3. toString() 메서드
toString() 메서드는 객체(인스턴스) 정보를 문자열(String)으로 반환하는 메서드다.
1) Object 클래스의 toString() 메서드
Object 클래스의 toString()은 생성된 인스턴스의 '클래스 이름@해시 코드 값'을 반환한다.
출력문에 참조 변수를 넣으면 인스턴스 정보가 출력되는데 이때 자동으로 toString()이 호출된다.
// 두 결과 모두 인스턴스 정보 출력
System.out.println(book); // 참조 변수
System.out.println(book.toString()); // toString()
2) String 과 Integer 클래스의 toString() 메서드
JDK에서 제공하는 String, Integer 클래스에는 toString() 메서드가 이미 재정의 되어있다.
String 클래스는 문자열 값, Integer 클래스는 정수 값을 반환한다.
String str = new String("test");
System.out.println(str); // test
Integer n = new Integer(100);
System.out.println(n); // 100
3) Book 클래스에서 toString() 메서드 직접 재정의하기
우리가 만든 클래스의 toString()을 직접 재정의하는 경우다.
4. equals() 메서드
equals() 메서드는 두 인스턴스의 주소 값을 비교하여 boolean값(true/false)를 반환한다.
물리적 동일성(인스턴스의 메모리 주소가 같음)뿐 아니라 논리적 동일성(논리적으로 두 인스턴스가 같음)을 구현할 때도 equals() 메서드를 재정의하여 사용한다.
1) Object 클래스의 equasl() 메서드
인스턴스를 가리키는 참조 변수가 2개 있을 때 두 인스턴스가 물리적으로 같다는 것은 두 인스턴스의 주소 값이 같은 경우 즉, 두 변수가 같은 메모리 주소를 가리키고 있는 경우다.
두 인스턴스가 있을 때 == 은 단순히 물리적으로 같은 메모리 주소인지 여부를 확인하고
Object의 equals() 메서드는 재정의를 하여 논리적으로 같은 인스턴스인지(메모리 주소가 다르더라도 같은 학생인지)를 확인하도록 구현할 수 있다.
2) String과 Integer 클래스의 equals() 메서드
JDK에서 제공하는 String, Integer 클래스에는 equals() 메서드가 이미 재정의 되어있다.
3) Student 클래스에서 equals() 메서드 직접 재정의하기
우리가 만든 클래스의 equals()을 직접 재정의하는 경우다.
5. hashCode() 메서드
해시(Hash)는 정보를 저장하거나 검색할 때 사용하는 자료구조다.
hasCode()는 해시 알고리즘을 사용하여 객체의 해시 코드 값을 반환하는 메서드다.
해시 코드 값은 JVM이 힙 메모리에 저장한 인스턴스의 주소값이다.
즉, 두 인스턴스가 같다면 hashCode() 메서드에서 반환하는 해시 코드 값이 같아야 하므로 논리적으로 같은 두 객체도 같은 해시 코드 값을 반환하도록 hashCode() 메서드를 재정의해야 한다.
eauls() 메서드를 재정의했다면 hashCode() 메서드도 재정의해야 한다.
1) String 과 Integer 클래스의 hashCode() 메서드
JDK에서 제공하는 String, Integer 클래스에는 hashCode() 메서드가 이미 재정의 되어있다. (equals 가 재정의되어있으므로)
2) Student 클래스에서 hashCode() 메서드 재정의하기
우리가 만든 클래스의 equals()을 직접 재정의하는 경우다.
hashCode() 메서드를 재정의할 때는 equals() 메서드에서 논리적으로 같다는 것을 구현할 때 사용한 멤버 변수를 활용하는 것이 좋다.
6. clone() 메서드
clone() 메서드는 객체를 복제해 또 다른 객체를 반환해주는 메서드다.
원본을 유지하고 복사본을 사용하거나 기본 틀의 복사본을 사용해 동일한 인스턴스를 만들어 복잡한 생성 과정을 간단히 하기 위해 사용한다.
clone() 메서드를 사용하려면 객체를 복제해도 된다는 의미로 클래스에 Cloneable 인터페이스를 implements 해야한다.
'Java > Do It! 자바 프로그래밍' 카테고리의 다른 글
[JAVA] 11-3. 기본 클래스_Wrapper 클래스 (0) | 2022.05.08 |
---|---|
[JAVA] 11-2. 기본 클래스_String 클래스 (0) | 2022.05.07 |
[JAVA] 10. 인터페이스 (0) | 2022.05.07 |
[JAVA] 09. 추상 클래스 (0) | 2022.05.06 |
[JAVA] 08. 상속과 다형성 (0) | 2022.05.04 |