본문 바로가기

프로그래밍/JAVA

Object의 메서드/equals/hashCode/clone

Object class는 모든 자바 클래스의 최상위 클래스이다. 

필드는 없고, 11개의 메소드를 가지고 있다. 



toString

- 해당 인스턴스에 대한 정보를 문자열로 반환한다. 

- 구분자로 '@'가 사용되고 그 뒤로 16진수 해시 코드가 추가된다. 





equals

- 전달 받은 매개변수와 해당 인스턴스를 비교하여 그 결과를 반환한다.

- 참조값을 비교하므로 주소 값이 같아야 참이 된다. 


- 중요한 규칙이 있는데, equals를 재정의 할 때는 hashCode도 재정의 해야 한다. 

- 그렇지 않으면 규약이 깨질 수 있다. (A->B가 true이면 C->B는 true다 뭐 이런거..)

- 자세한 내용은 참고 블로그를 보자.




clone

- 해당 인스턴스를 복제하여 새로운 인스턴스를 생성해 반환한다.

- Object의 clone은 단지 필드 값만을 복사한다. 배열이나 인스터스는 제대로 복사되지 않는다. 


org.apache.http.client.utils.CloneUtils를 사용해보면 좋을 듯.

- CloneUtils를 사용하려면 Cloneable interface를 implements 해야 한다. 

- clone() 메서드를 public으로  override 해야 한다. (기본은 protected)

- 자세한 내용은 참고 블로그를 보자.

- 얕은 복사: shalldowCopy = someInstance;

- 깊은 복사: deepCopy = (SomeClass) CloneUtils.clone(someInstance);

- 원본을 바꿨을 때 깊은 복사는 변경되지 않는다.


- 객체 내의 멤버 변수가 원시 변수(int, char, float 등), Immutable Class(String, Boolean, Integer 등) 또는 Enum이 아닌 경우(가령 다른 클래스),

그 멤버 변수의 clone을 호출해서 복사를 해야 한다. 그렇지 않으면 얕은 복사가 이뤄진다. 





hashCode

-  equals를 재정의 할 때는 반드시 hashCode도 재정의 해야 한다. 






finalize

가비지 컬렉션이 수행될 때 더 이상 사용하지 않는 자원에 대한 정리 작업을 진행하기 위해 호출되는 종료자 메서드.

super.finalize() 메소드를 통해서 명시적으로 호출해야 한다.

가비지 컬렉션의 실행 시점이 불분명하기 때문에 종료자 메소드는 사용을 권하지는 않는다.





그외 메서드들..

getClass

notify

notifyAll

wait






'프로그래밍 > JAVA' 카테고리의 다른 글

Collection remove에 대해  (0) 2019.03.20
String, StringBuffer, StringBuilder  (0) 2019.03.19
JVM  (0) 2019.03.19
ArrayList + Generic 구현하기  (0) 2019.02.28
Java Collections Framework  (0) 2019.02.28