이펙티브 자바 ㅤㅤㅤㅤㅤ By ds_chanin [아이템 40] @Override 애너테이션을 일관되게 사용하라 @Override 애너테이션은 메서드 선언에만 달 수 있다. 이 애너테이션은 상위 타입의 메서드를 재정의 했음을 나타낸다. 따라서 상위 클래스의 메서드를 재정의하려는 모든 메서드에 @Override 애너테이션을 달자. 예외는 단 한 경우이다. 구체 클래스에서 상위 클래스의 추상 메서드를 재정의 할 때이다. 구체 클래스인데 추상 메서드를 구현하지 않았다면 컴파일러가 이를 알려준다. 그래도 재정의 메서드에 일괄적으로 @Override 애너테이션을 달아주는 것은 좋은 선택이다. IDE를 사용한다면 IDE는 재정의한 메서드에 대해 @Override 를 붙이도록 권장할 것이다. 재정의할 의도였으나 실수로 새로운 메서드를 추가했을 때 컴파일러가 알려주는 보완재 역할을 할 것이다. 인터페이스의 메서드를 재정의 할 때.. Reading Record/이펙티브자바 2020. 6. 30. ㅤㅤㅤㅤㅤ By gobukgol [아이템 37] ordinal 인덱싱 대신 EnumMap을 사용하라 이따금 열거 타입의 ordinal을 배열의 인덱스로 이용하는 경우가 있다. 식물의 생애주기를 열거 타입으로 표현한 LifeCycle 열거 타입을 예로 그러한 경우를 살펴보자. public class Plant { final String name; final LifeCycle lifeCycle; public Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return name; } } public enum LifeCycle { ANNUAL, PERNNIAL, BIENNIAL } Plant 클래스는 LifeCycle 열거 타입을 멤.. Reading Record/이펙티브자바 2020. 4. 18. ㅤㅤㅤㅤㅤ By gobukgol 아이템 [19] - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 상속을 고려한 설계와 문서화란? 1. 상속용 클래스는 재정의할 수 있는 메소드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. 클래스의 API로 공개된 메소드에서 클래스 자신의 또 다른 메소드를 호출할 수도 있다. 이때 호출되는 메소드가 하위 클래스에서 재정의 가능한 메소드라면 이 사실을 호출하는 메소드의 API 설명에 명시해야한다. 더 넓은 의미로는. 재정의 가능 메소드를 호출할 수 있는 모든 상황을 문서로 남겨두어야 한다. 이를 도와주는 용도로 @implSpec 태그가 있는데 이는, javadoc으로 api 생성시 "Implementaion Requirements:"로 대체되고 그 메소드의 내부 동작방식을 설명하는 곳이다. 활성화 하기 위해선 javadoc -tag "implSpec:.. Reading Record/이펙티브자바 2020. 2. 27. 이전 1 다음