이펙티브자바3장

· Java
아이템 14 : Comparable을 구현할지 고려하라Comparable 인터페이스는 객체 간에 자연스러운 순서를 정의하는 방법을 제공하며, 클래스의 인스턴스들이 정렬 가능함을 의미한다. 이 인터페이스를 구현하면 compareTo 메서드를 통해 객체 간의 순서를 비교할 수 있게 된다. 순서가 명확한 VO(Value Object) 클래스를 작성할 때는 Comparable을 구현하는 것이 권장된다.1. compareTo의 규약compareTo 메서드는 객체의 순서를 비교하고 다음 값을 반환한다:음의 정수: 이 객체가 주어진 객체보다 작을 때0: 두 객체가 같을 때양의 정수: 이 객체가 주어진 객체보다 클 때compareTo는 다음의 규칙을 따라야 한다두 객체의 순서를 바꿔서 비교해도 예상된 결과가 나와야 한..
· Java
아이템 13 clone 재정의는 주의해서 진행하라Cloneable 인터페이스는 객체 복제를 허용하는 클래스임을 표시하는 용도다. 하지만 clone 메서드는 Cloneable이 아닌 Object 클래스에 정의되어 있으며, 기본적으로 protected로 선언되어 있어 상속을 통해 접근해야 한다. Cloneable 인터페이스에는 실제로 메서드가 존재하지 않지만, 이 인터페이스를 구현하는 클래스에서 clone을 호출할 수 있게 된다.1. clone의 명세는 허술하다clone의 명세는 매우 허술하며, 이를 제대로 구현하는 책임은 개발자에게 전가된다. 예를 들어, 상위 클래스에서 super.clone() 대신 생성자를 호출해 반환해도 컴파일러는 이를 문제없이 통과시킨다. 이는 clone 메서드의 동작이 일관되지 않..
· Java
아이템 12 toString을 항상 재정의하라toString 메서드는 객체의 정보를 사람이 읽기 쉽게 반환해야 한다. 잘 재정의된 toString 메서드는 객체의 주요 정보를 쉽게 확인할 수 있게 해주며, 특히 디버깅에 매우 유용하다. 따라서, 모든 하위 클래스에서 toString을 재정의하는 것이 권장된다.좋은 toString 작성 방법주요 정보를 포함하라: toString 메서드는 그 객체가 가진 핵심 정보를 포함하는 문자열을 반환해야 한다. 이는 그 객체를 설명할 수 있는 충분한 정보가 들어있어야 한다.명확한 의도: 반환할 문자열의 포맷을 주석으로 명시하거나 문서화해서 다른 개발자들이 그 형식을 이해하고 사용할 수 있게 해야 한다.대체 API 제공: toString이 단순히 디버깅용이어야지, 이를 ..
· Java
아이템 11 equals를 재정의하려거든 hashCode도 재정의하라equals 메서드를 재정의했다면 반드시 hashCode도 재정의해야 한다. 그렇지 않으면, 두 객체가 논리적으로 같더라도 다른 해시값을 반환하여 해시 기반 컬렉션(HashMap, HashSet)에서 일관성이 깨지거나 제대로 작동하지 않을 수 있다.1. hashCode와 equals의 관계일반 규약에 따르면, 두 객체가 equals에 의해 같다고 판별되면, 반드시 같은 hashCode를 반환해야 한다.그렇지 않으면, 같은 논리적 객체가 서로 다른 해시 버킷에 들어가고, 해시 기반 자료구조가 올바르게 동작하지 않게 된다.2. hashCode 규약객체의 동일성을 나타내는 필드를 기준으로 일관된 해시코드를 반환해야 한다.다음의 규칙을 따라야 ..
· Java
아이템 10 - equals는 일반 규약을 지켜 재정의하라다음 상황중 하나에 해당한다면 equals를 굳이 재정의하지 않는 것이 최선1.각 인스턴스가 본질적으로 고유하다.객체가 고유한 개체라면, 모든 객체는 자신과만 같고, 다른 객체와는 절대 같을 수 없다. 예를 들어, Thread, Socket 같은 시스템 자원 핸들러나 고유한 상태를 가진 객체들은 인스턴스마다 서로 다른 개체로 취급되므로 equals를 재정의할 필요가 없다. 이런 객체는 동등성을 비교하는 게 무의미하기 때문에 equals 메서드를 굳이 재정의하지 않아도 된다.2. 인스턴스의 논리적 동치성을 검사할 일이 없다.논리적 동등성이란 두 객체가 값으로 비교될 때 같다고 판단되는 경우를 말한다. 하지만 이 규칙에 해당하는 경우는 논리적 동등성을..
ggdev
'이펙티브자바3장' 태그의 글 목록