글
Object 클래스는 모든 클래스가 상속하는 조상 클래스입니다. JAVA 는 이 Object 클래스에 여러 유용한 메소드들을 미리 정의해두어, 이를 상속받아서 override 하여 사용할 수 있도록 제공하고 있습니다.
먼저 살펴볼 메소드는 finalize 메소드입니다. finalize 메소드의 원형은 아래와 같습니다.
protected void finalize() throws Throwable{}
finalize 라는 메소드는, 클래스 인스턴스가, Garbage Collector 에 의해 메모리에서 소멸되기 직전에 자동으로 불리는 메소드입니다. 기본적으로는 자동으로 불리지만, 이를 강제로 호출하도록 하려면 아래와 같은 코드를 작성해야 합니다.
System.gc();
System.runFinalization();
Object 의 finalize 메소드를 하위 클래스에서 재정의하면, 클래스의 인스턴스가 소멸되는 시점에, 개발자가 원하는 작업들을 할 수 있도록 지정할 수 있게 됩니다. 단, override 시에는, 메소드의 가장 윗 라인에서는, super.finalize() 문장을 삽입하여 Object 의 finalize 메소드를 명시적으로 호출해주는 것이 좋습니다. 왜냐하면, Object 의 finalize 메소드에서 뭔가 중요한 처리들을 해줄수도 있기 때문입니다.
JVM 의 job 처리 상황에 따라, 객체의 finalize 메소드를 한번도 호출 안할 수도 있습니다. (어차피 프로그램이 종료되면, 메모리에서 사라집니다.)
그리고, 객체들간의 finalize 메소드 호출 순서는, 보장되지 않습니다. (JVM 의 job 처리 우선순위에 따라 달라집니다.) 먼저, 강제로, finalize 메소드를 호출하게 했다고 하더라도 그 객체의 finalize 메소드는 이보다 나중에 finalize 메소드를 호출하도록 요청한 클래스보다도 나중에 불릴수도 있다는 의미입니다.
그 다음 살펴볼 메소드는 equals 메소드입니다. 원형은 아래와 같습니다.
public boolean equals(Object obj){...}
equals 메소드는, 서로 다른 두 인스턴스를 비교하여 참 / 거짓을 반환하는 메소드입니다. 매개변수로 받은 obj 와 이 equals 메소드를 호출한 객체의 참조 변수 값을 비교하여 같으면 true, 다르면 false 를 반환합니다. 하위 클래스에서 equals 메소드를 사용하려면, 하위 클래스에서 재정의를 하되, 참조변수가 같은지 비교하는 대신 원하는 클래스 내의 값을 비교하는 형태로 정의해야 합니다.
세번째로, hashCode 메소드를 살펴보겠습니다. 원형은 아래와 같습니다.
public native int hashCode();
hashCode 메소드는 각 인스턴스별로 거의 다른 해쉬값을 리턴하는 메소드입니다. (어느 해시 함수를 사용하느냐에 따라 같을 수도 있음) 인스턴스의 주소값을 기반으로 해시 함수를 돌려서 얻은 값을 반환합니다. 기본적으로는, 이 해쉬값이 다르면 인스턴스도 다른 것으로 간주합니다. 따라서, equals 메소드를 overriding 해서 두 객체를 같은 것으로 간주할 경우, 이 동치 비교 기준을 토대로 hashCode 메소드 또한 overriding 해서 equals 메소드에서 같게 된 두 객체를 hashCode 메소드에서도 같은 반환값을 생성하도록 해야 합니다.
hashCode 는 객체의 불일치성을 확인하는 데 사용할 수 있습니다. 두 객체의 hashCode 가 다르면, 이 객체는 100 % 다른 객체라고 여깁니다. 하지만, hashCode 가 같다고 해서 무조건 객체가 같다고 확신할 수는 없습니다. 왜냐하면 해시 함수에 따라서 다른 인스턴스지만 같은 해시값을 가지고 있을 수도 있기 때문입니다. 따라서, hashCode 로는 객체의 일치성은 확인할 수 없습니다. 객체의 일치성을 정확히 확인하려면, 먼저, hashCode 로 같은지 확인을 하고, 같으면, equals 메소드로 또 확인을 해서 같은지 확인해야 합니다.
(Object 클래스 참고)
http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
'4.1) OCJP > 관련 이론 및 문법' 카테고리의 다른 글
관련 이론 및 문법 - Thread 클래스 (0) | 2015.07.07 |
---|---|
관련 이론 및 문법 - 데드락 (deadlock) (0) | 2015.07.07 |
관련 이론 및 문법 - 응집도 (cohesion) (0) | 2015.07.01 |
관련 이론 및 문법 - 결합도 (coupling) (0) | 2015.07.01 |
관련 이론 및 문법 - 열거형 (enumeration) (0) | 2015.06.25 |
관련 이론 및 문법 - static (0) | 2015.06.23 |
관련 이론 및 문법 - Cloneable 인터페이스 (0) | 2015.06.22 |
관련 이론 및 문법 - Runnable 인터페이스 (0) | 2015.06.22 |
관련 이론 및 문법 - TreeSet 클래스 (0) | 2015.06.22 |
관련 이론 및 문법 - 배열 (array) (0) | 2015.06.21 |
RECENT COMMENT