DEV ℧ Developer Diary

[EffectiveJava] item40 - @Override 애너테이션을 일관되게 사용하라

@Override는 메서드 선언에만 달 수 있으며, 이 애너테이션이 달렸다는 것은 상위 타입의 메서드를 재정의했음을 뜻한다.

이 애너테이션을 일관되게 사용하면 여러가지 악명 높은 버그들을 예방해 준다.

다음 예제를 살펴보자. 다음 예제에는 버그 두가지가 있다. 무엇일까?

public class <span...

[EffectiveJava] item39 - 명명 패턴보다 애너테이션을 사용하라

전통적으로 도구나 프레임워크가 특별히 다뤄야할 프로그램 요소에는 딱 구분되는 명명 패턴을 적용해왔다.

명명 패턴

예를들어, 유명한 테스트 프레임워크중 하나인 JUnit은 버전3까지 테스트 메서드의 이름을 test로 시작하게 하였다. 효과적인 방법이지만 단점도 컸다.

첫번째로, 오타에 취약하다. test를 tset와 같은 오타가 날 경우, JUnit3는 이 메서드를 무시하고...

[EffectiveJava] item38 - 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라

열거 타입은 거의 모든 상황에서 이 책초판에서 소개한 타입의 안전 열거 패턴보다 우수하다.

단, 예외가 하나 있으니, 타입 안전 열거 패턴은 확장할 수 있으니 열거 타입은 그럴 수 없다는 점이다.
달리 말하면, 타입 안전 열거 패턴은 열거한 값들을 그대로 가져온 다음 값을 더 추가하여...

[EffectiveJava] item37 - ordinal 인덱싱 대신 EnumMap을 사용하라

이따금 배열이나 리스트에 원소를 꺼낼 때 ordinal 메소드로 인덱스를 얻는 코드가 있다.

class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name;...

[EffectiveJava] item36 - 비트 필드 대신 EnumSet을 사용하라

열거한 값들이 주로 (단독이 아닌) 집합으로 사용될 경우, 예전에는 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴을 사용했다고 한다.

비트 필드

public class Text { public static final int...