본문 바로가기
반응형

Java97

[EffectiveJava] Item13 clone 재정의는 주의해서 진행하라. Cloneable 는 복제해도 되는 클래스라는것을 명시하는 용도의 인터페이스 이지만, clone메서드가 선언된 곳이 Cloneable 클래스가 아닌 Object 클래스이다 또한 clone 메서드는 protected로 되어있다. 그래서 외부 객체에서 clone 메서드를 호출할 수 없다. ( 리플렉션을 사용하면되지만 반드시 성공하는 것은 아니다 ) // 실제 Object 클래스 안에있는 clone의 코드 protected native Object clone() throws CloneNotSupportedException; 하지만, 이런 문제가 있더라도 실제로 Cloneable 방식을 널리 사용되고 있기 때문에 알아두면 좋습니다. Item13에서는 clone 메서드를 구현하는 방법과 언제 그렇게 사용하는지 설.. 2020. 12. 27.
[EffectiveJava] Item12 toString을 항상 재정의하라 toString() 은 Java개발을 하는 누구라도 한번쯤은 봤을법한 메서드 입니다. toString()메서드는 Class의 최상의 부모인 Object의 기본 메서드 입니다. Object.toString()메서드는 우리가 볼수 있는 적당한 문자열을 반환하는게 아니라 클래스이름@16진수로 표시한 해시코드를 문자열로 반환한다. toString의 일반 규약에 따르면 간결하면서 사람이 보기 쉬운 형태의 정보를 반환해야 한다. toString()의 규약은 모든 하위 클래스에서 이 메서드를 재정의하라고 한다. 실제로 개발시에도 toString()을 재정의하여 많이 사용한다. toString()같은 경우는 재정의하면 훨신 보기 쉽고 디버깅 하기도 쉽습니다. toString()메서드는 객체를 print를 통해 출력하고.. 2020. 12. 21.
[EffectiveJava] Item11 equals를 제정의하려거든 hashCode도 재정의하라 :) equals를 재정의한 클래스 모두 hashCode도 재정의해야한다 위에 적어놓은 소제목 처럼 hashCode를 재정의하지 않는다면 일반 규약을 어기게 되어 HashMap이나 HashSet같은 Collection에서의 원소로 사용될 때 문제를 일으키게 된다. Object 명세 규약 equals에 사용되는 핵심 필드가 변경되지 않았다면 , 실행되는 동안 hashCode메서드는 몇번을 호출해도 항상 같은 hashCode값을 반환햐야한다. equals가 두 객체를 같다고 판단하였다면 두 객체가 가지고있는 hashCode는 같은 값을 반환해야 한다. equals가 두 객체를 다르다고 했더라도, 두 객체의 hashCode가 서로 다른 값을 반환해야할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해.. 2020. 12. 21.
[EffectiveJava] Item10 equals는 일반 규약을 지켜 재정의하라 이번 Item10은 equals에 대한 내용에 대한 글이 있습니다 equals 메서드는 재정의하기 쉬워 보이지만 잘못된 구성을 하면 생각하지도 못한 사이드 이펙트때문에 디버깅하는데 문제를 발생시킬 수 있습니다. 문제를 발생시키지 않기 위해서는 애초에 재정의 하지 않는것을 추천드립니다만 언젠가는 구현해야할 내용입니다. 다음 내용은 어떠한 경우에 재정의하지 않아도 되는지 알아보겠습니다. 각인스턴스가 본질적으로 고유하다 인스턴스의 '논리적 동치성'을 검사할 일이 없다 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다 대부분의 set 구현체는 AbstractSet이 구현한 equals를 상속받아 사용하고 List는 AbstractList, Map은 AbstractMap으로부터 상속받아 사용한.. 2020. 12. 16.
반응형