본문 바로가기

이펙티브자바211

이펙티브 자바 3장 규칙 12. Comparable 구현을 고려하라 Effective Java 3장 객체의 생성과 삭제 규칙 12. Comparable 구현을 고려하라 CompareTo compareTo 메서드는, Object 에 구현되지않았으며, Comparable 인터페이스에 있는 유일한 메소드 단순 동치검사 외 순서비교가 가능한 메서드임. 거의 모든 자바 플랫폼 라이브러리에 포함된 값 클래스는 해당 인터페이스를 구현한다고 보면 됌. compareTo 메서드 일반규약 일반적으로 해당 규약을 가지는데, 이는 규칙8의 equals 와 매우 유사함. sgn(x.compareTo(y) == -sgn(y.compareTo(x))) x.compareTo(y) > 0 && y.compareTo(z) > 0 이면, x.compareTo(z) > 0 x.compareTo(y) == .. 2021. 2. 17.
이펙티브 자바 3장 규칙 11. clone을 재정의할 때는 신중하라 Effective Java 3장 객체의 생성과 삭제 규칙 11. clone을 재정의 할 때는 신중하라 Cloneable 인터페이스 clone 메서드가 구현되어 있지 않으나, Object의 메소드가 어떻게 동작할지에 대해 결정하는 역할 Cloneable 인터페이스를 구현한 객체만이 clone 메소드를 override 했을 때 복제가능하며, 구현되어있지 않으면 CloneNotSupportedException을 던짐. Object의 clone 메소드의 경우, 호출한 객체와 동일한 객체를 새로 만들어 반환한다.* clone 메서드의 일반규약 x.clone() != x x.clone().getClass() == x.getClass() x.clone().equals(x) clone 메서드 재정의 시 고려할 점 비-.. 2021. 2. 17.
이펙티브 자바 3장 규칙 10. toString은 항상 재정의하라 Effective Java 3장 객체의 생성과 삭제 규칙 10. toString 은 항상 재정의하라 가능하다면, toString 메서드는 객체 내 중요정보를 모두 담아 반환해야 한다. toString 이 반환하는 문자열 형식을 명시하지 않건 하건, 어떤 의도인지 문서에 분명히 남겨야 할 것. toString 이 반환하는 정보는 전부 프로그래밍을 통해 가져올 수 있도록 하라(접근자 메서드) 2021. 2. 17.
이펙티브 자바 3장 규칙 9. equals를 재정의할 때는 반드시 hashCode도 재정의하라 Effective Java 3장 객체의 생성과 삭제 규칙 9. equals 를 재정의할 때는 반드시 hashCode도 재정의하라 HashCode의 일반규약 응용 프로그램 실행 중 같은 객체의 hashCode 는 언제나 동일한 정수가 반환되어야 함 equals(Object) 가 같다고 판정한 두 객체의 hashCode 객체의 값은 같아야 함 equals(Object) 가 다르다고 판정한 두 객체의 hashCode 값은 무조건 다를 필요는 없음. 단, 서로 다른 hashCode 값이 나오면 해시테이블의 성능이 향상될 수 있다. hashCode 재정의 시 주의점 성능개선을 위해 객체 중요부분을 해시코드 계산 과정에서 생략하면 안됌. 2021. 2. 17.
이펙티브 자바 3장 규칙 8. equals 를 재정의할 때는 일반규약을 따르라 Effective Java 3장 객체의 생성과 삭제 규칙 8. equals를 재정의할 때는 일반규약을 따르라 Equals 메서드를 재정의 하지 않아도 되는 경우 각각의 객체가 고유 값(value) 대신 활성개체(activity entity)를 나타내는 경우 - Thread 클래스에 "논리적 동일성" 검사방법이 있건 없건 상관없을 때 java.util.Random 클래스의 경우, 굳이 이 클래스의 객체가 똑같은 난수를 만드는 객체인지 검사하는 equals 메서드를 정의할 필요성이 없음. 상위 클래스에서 재정의한 equals 가 하위클래스에도 적합할 때 클래스가 private 또는 package-private으로 선언되었고, equals 메서드를 호출할 일이 없을 때 Equals 메서드를 재정의 해야할 때 .. 2021. 2. 17.
이펙티브 자바 2장 규칙 7. 종료자 사용을 피하라 Effective Java 2장 객체의 생성과 삭제 규칙 7. 종료자 사용을 피하라 종료자(finalize)를 사용한다면? 예측불가능하며 불필요함. 종료자의 경우 수행되기 까지 시간이 걸릴 수 있기 때문에 되도록 긴급한 작업은 종료자 안에서 처리하지 않는 것이 좋음. 종료자로 인해 객체 메모리 반환이 지연되는 경우도 생길 수 있음. (ex) 파일을 종료자 안에서 닫을 때 치명적임. JVM은 종료자를 천천히 실행하므로 열린 상태의 파일이 많이 남아있을 수 있음. 종료자를 사용하면 성능면에서도 심각하게 떨어질 수 있음. 데이터베이스와 같은 공유자원에 대한 중요 상태 정보들을 종료자로 갱신하면 안됌. 대안 종료자보단, 명시적 종료메서드를 사용(객체 종료를 보장하기 위해 보통 try-catch문과 자주 쓰임.).. 2021. 2. 17.