٩(๑•̀o•́๑)و

20200307 - Object Class 본문

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의 toString
String의 toString - Object의 String을 오버라이딩(재정의)
Object와 String의 toString
Object를 상속받은 Book에서 toString을 재정의

Object클래스의 equals() 메서드

  • 두개의 인스턴스가 동일한지를 보여주는 메서드
  • 두 객체의 동일함을 논리적으로 재정의할 수 있음
  • 물리적 동일함 : 같은 주소를 가지는 객체. 즉 같은 객체.
  • 논리적 동일함 : 같은 학번의 학생, 같은 주문번호의 주문 등
  • 물리적으로 다른 메모리에 위치한 객체라도 논리적으로 동일함을 구현하기 위해 사용하는 메서드
  • Object의 equals()는 기본적으로 x==y와 동일
  • String 에서는 이를 객체가 가리키는 문자열 내용이 동일한지로 재정의

Object 의 equals()
String의 equals
Student의 equals는 Object의 equals 를 그대로 상속받은 상태 - 단순히 두 객체간 == 연산
Student에서 equals 재정의

Object클래스의 hashCode() 메서드

  • 반환값 : 인스턴스가 저장된 가상머신의 주소를 10진수로 변환
  • 객체가 같다는 의미는 두 객체의 해시코드값이 같다는 의미와 동일
  • 두개의 서로 다른 메모리에 위치한 인스턴스가 동일하다는 것의 의미 : 논리적으로 동일하고(equals()의 반환값이 true) hashCode()의 반환값이 동일해야함 ==> equals()가 true일때 해시코드값도 동일한 값이 반환될 수 있도록 hashCode()를 오버라이딩했을뿐 실제 메모리주소가 바뀌는 것은 아니다.
  • 실제 메모리 주소는 System.identityHashCode() 메서드로 얻을 수 있다.

Object클래스의 hashCode() 메서드
String클래스의 hashCode() 메서드
System클래스의 identityHashCode() 메서드
Object의 hashCode()
Object의 hashCode()를 재정의
String의 hashCode()
hashCode값과 identityHashCode값

Object클래스의 clone() 메서드

  • 객체의 복사본을 만듦
  • 기본 틀(prototype)으로 부터 같은 속성 값을 가진 객체의 복사본을 생성할 수 있음
  • 생성자와는 다른 의미임. 인스턴스의 상태 자체를 그대로 복사해오는 것이기때문에 private변수의 값까지 복사가 된다.
  • 객체지향 프로그래밍의 정보은닉에 위배되는 가능성이 있으므로 복사할 객체는 Cloneable 인스턴스를 명시해야함 - 복사 대상이 되는 객체의 클래스에 implements Cloneable 을 명시해야함. 그렇지 않을 경우 CloneNotSupportedException발생

Cloneable 명시하지 않았을 경우
정상적인 clone

Object클래스의 finalize()메서드

  • 직접 호출하는 메서드가 아님
  • 인스턴스가 힙메모리에서 해제될때 GC에서 호출되는 메서드
  • 이 메서드가 정의되어있으면 GC에서 이걸 수행
  • 내부적으로 리소스의 해제, 아직  않는 소켓 닫기 등의 일을 수행

'Java' 카테고리의 다른 글

20200308 - Generic 프로그래밍  (0) 2020.03.08
20200308 - String, Wrapper Class  (0) 2020.03.08
20200307 - 인터페이스  (0) 2020.03.07
20200306  (0) 2020.03.06
20200305  (0) 2020.03.06