Java
20200307 - Object Class
11mia
2020. 3. 7. 03:39
Object class
- 자바의 모든 클래스의 최상위 클래스
- java.lang.Object 클래스 - java.lang package - 자바 설치 위치의 jdk/lib/src.zip에서 java.base/java/lang으로 존재.
- java.lang패키지는 컴파일러가 자동으로 import해줌 - 별도로 import문을 쓰지 않음
- 모든 클래스는 Object 클래스를 상속받음 - 모든 클래스는 사실 extends Object 임 - 컴파일러가 자동으로 넣어줌.
- 모든 클래스는 Object 클래스의 메서드를 사용할 수 있음
- 모든 클래스는 Object 클래스의 일부 메서드(final이 아닌 것)를 재정의하여 사용할 수 있음 - final로 정의된 메서드들은 하위 클래스에서 재정의 불가
- https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
- final로 선언된 몇몇 메서드가 존재 - wait, getClass, notify, notifyAll 등
- wait, notify, notifyAll은 쓰레드프로그래밍에서 사용
- 모든 클래스들은 Object class로 자동 형변환이 된다. Object class에서 다시 원래의 형으로 다운캐스팅 역시 가능
Object클래스의 toString() 메서드
- 원형 : getClass().getName() + '@' + Integer.toHexString(hashCode())
- 객체의 정보를 String으로 바꾸어 사용할 때 유용함
- 자바 클래스 중에는 이미 정의된 클래스가 많음. (ex. String, Integer, Calendar 등)
- 많은 클래스에서 재정의하여 사용
Object클래스의 equals() 메서드
- 두개의 인스턴스가 동일한지를 보여주는 메서드
- 두 객체의 동일함을 논리적으로 재정의할 수 있음
- 물리적 동일함 : 같은 주소를 가지는 객체. 즉 같은 객체.
- 논리적 동일함 : 같은 학번의 학생, 같은 주문번호의 주문 등
- 물리적으로 다른 메모리에 위치한 객체라도 논리적으로 동일함을 구현하기 위해 사용하는 메서드
- Object의 equals()는 기본적으로 x==y와 동일
- String 에서는 이를 객체가 가리키는 문자열 내용이 동일한지로 재정의
Object클래스의 hashCode() 메서드
- 반환값 : 인스턴스가 저장된 가상머신의 주소를 10진수로 변환
- 객체가 같다는 의미는 두 객체의 해시코드값이 같다는 의미와 동일
- 두개의 서로 다른 메모리에 위치한 인스턴스가 동일하다는 것의 의미 : 논리적으로 동일하고(equals()의 반환값이 true) hashCode()의 반환값이 동일해야함 ==> equals()가 true일때 해시코드값도 동일한 값이 반환될 수 있도록 hashCode()를 오버라이딩했을뿐 실제 메모리주소가 바뀌는 것은 아니다.
- 실제 메모리 주소는 System.identityHashCode() 메서드로 얻을 수 있다.
Object클래스의 clone() 메서드
- 객체의 복사본을 만듦
- 기본 틀(prototype)으로 부터 같은 속성 값을 가진 객체의 복사본을 생성할 수 있음
- 생성자와는 다른 의미임. 인스턴스의 상태 자체를 그대로 복사해오는 것이기때문에 private변수의 값까지 복사가 된다.
- 객체지향 프로그래밍의 정보은닉에 위배되는 가능성이 있으므로 복사할 객체는 Cloneable 인스턴스를 명시해야함 - 복사 대상이 되는 객체의 클래스에 implements Cloneable 을 명시해야함. 그렇지 않을 경우 CloneNotSupportedException발생
Object클래스의 finalize()메서드
- 직접 호출하는 메서드가 아님
- 인스턴스가 힙메모리에서 해제될때 GC에서 호출되는 메서드
- 이 메서드가 정의되어있으면 GC에서 이걸 수행
- 내부적으로 리소스의 해제, 아직 않는 소켓 닫기 등의 일을 수행