본문 바로가기

공부/JAVA19

이펙티브 자바 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.
이펙티브 자바 2장 규칙 6. 유효기간이 지난 객체참조는 폐기하라 Effective Java 2장 객체의 생성과 삭제 규칙 6. 유효기간이 지난 객체 참조는 폐기하라 자바와 같은 언어에서는 GC가 메모리 관리를 잘 해주기 때문에, 메모리 관리에 대한 필요성을 망각할 수 있음. 하지만, 메모리 누수가 생기는 경우가 존재하며, 다시 이용되지 않을 참조에 대해 아직 사용하고 있다고 생각하고 쓰레기 수집기가 처리하지 않음. 자체적으로 관리하는 메모리가 있는 클래스를 만들 때는, 메모리 누수가 발생하지 않도록 주의해야 하며, 사용하지 않는 원소 안에 있는 객체참조는 null 로 변경해주어야 함. 보통, 캐시(cache) 의 경우, 메모리 누수가 자주 발생함. -> WeakHashMap사용하면 됌. 캐시를 구성할 때 캐시 바깥에서 키를 참조하고 있을 때만 값을 보관하면 될 때 쓸.. 2021. 2. 17.