728x90
item 34. int 상수 대신 열거 타입을 사용하라
- 열거 타입은 확실히 정수 상수보다 뛰어나다. 더 알기쉽고 강력하다
- 대다수 열거 타입이 명시적 생성자나 메서드 없이 쓰이지만, 각 상수를 특정 데이터와 연결짓거나 상수마다 다르게 동작하게 할 때는 필요하다
- 하나의 메서드가 상수별로 다르게 동작해야할 때에는 switch문 대신 상수별 메서드 구현을 사용하자
- 열거 타입 상수 일부가 같은 동작을 공유한다면 전략 열거 타입 패턴을 사용하자.
- Link : jyami.tistory.com/102
item 35. ordinal 메서드 대신 인스턴스 필드를 사용하라
- ordinal 메서드는 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료 구조에 쓸 목적으로 설계 되었다. 이 경우가 아니면 사용하지 말자
- 열거 타입 상수에 연결 된 값을 ordinal 메서드로 얻지 말고 인스턴스 필드에 저장하라.
- Link : https://jyami.tistory.com/103
item 36. 비트 필드 대신 EnumSet을 사용하라
- 열거할 수 있는 타입을 한데 모아 집합 형태로 사용한다고 해도 비트 필드를 사용할 이유는 없다
- EnumSet 클래스가 비트 필드 수준의 명료함과 성능을 제공하고 아이템 34에서 설명한 열거 타입의 장점까지 선사한다
- EnumSet의 유일한 단점은 (자바 11까지는 아직) 불변 EnumSet을 만들 수 없다는 것이다.
- 향후 릴리즈에서 수정될 때 까지는 (명확성과 성능이 조금 희생되지만) Collections.unmodifiableSet으로 EnumSet을 감싸 사용할 수 있다.
- Link : https://jyami.tistory.com/104
item 37. ordinal 인덱싱 대신 EnumMap을 사용하라
- 배열의 인덱스를 위해 ordinal을 쓰는 것은 일반적으로 좋지 않으니 EnumMap을 사용하라
- 다차원 관계는 EnumMap<..., EnumMap<...>> 으로 표현하라
- 애플리케이션 프로그래머는 Enum.ordinal을 (왠만해서는) 사용하지 말아야한다 (아이템 35)는 일반원칙의 특수한 사례다
- Link : https://jyami.tistory.com/105
item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
- 열거 타입 자체는 확장할 수 없지만, 인터페이스와 그 인터페이스를 구현하는 기본 열거 타입을 함께 사용해 같은 효과를 낼 수 있다.
- 이렇게 하면 클라이언트는 이 인터페이스를 구현해 자신만의 열거 타입(혹은 다른 타입)을 만들 수 있다.
- API가 (기본 열거 타입을 직접 명시하지 않고) 인터페이스 기반으로 작성되었다면 기본 열거 타입의 인스턴스가 쓰이는 모든 곳을 새로 확장한 열거 타입의 인스턴스로 대체해 사용 할 수 있다.
- Link : https://jyami.tistory.com/106
Item 39. 명명패턴보다 애너테이션을 사용하라
- 애너테이션으로 할 수 있는 일을 명명패턴으로 처리할 이유는 없다.
- 자바 프로그래머라면 예외 없이 자바가 제공하는 애너테이션 타입들은 사용해야한다.
- 마커애너테이션을 이용하여 애너테이션에 관심있는 프로그램에 추가 정보를 제공한다.
- 매개변수를 받는 애너테이션 타입, 반복가능한 애너테이션 등을 사용하여 소스 코드에 추가 정보를 제공할 수 있는 도구를 제공하자.
- Link : https://jyami.tistory.com/107
item 40. @Override 애너테이션을 일관되게 사용하라
- 재정의한 모든 메서드에 @Override 애너테이션을 의식적으로 달면 실수했을 때 컴파일러가 바로 알려준다.
- 예외는 하나다. 구체 클래스에서 상위 클래스의 추상 메서드를 재정의한 경우엔 이 애너테이션을 달지 않아도 된다. (단다고 해서 해롭진 않다.)
- Link : https://jyami.tistory.com/108
item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
- 마커 인터페이스와 마커 애너테이션은 각자의 쓰임이 있다.
- 새로 추가하는 메서드 없이 단지 타입 정의가 목적이라면 마커 인터페이스를 선택하자
- 클래스나 인터페이스의 프로그램요소에 마킹해야하거나 애너테이션을 적극 활용하는 프레임워크의 일부로 그 마커를 편입시키고자 한다면 마커 애너테이션이 올바른 선택이다.
- 적용 대상이 ElementType.TYPE인 마커 애너테이션을 작성하고 있다면, 잠시 여유를 갖고 정말 애너테이션으로 구현하는게 옳은지, 혹은 마커 인터페이스가 낫지는 않을지 곰곰히 생각해보자
- Link : https://jyami.tistory.com/109
'Dev Book Review > Effective Java' 카테고리의 다른 글
[Effective Java] item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 (0) | 2020.06.27 |
---|---|
[Effective Java] item 40. @Override 애너테이션을 일관되게 사용하라 (0) | 2020.06.27 |
[Effective Java] item 39. 명명 패턴보다 애너테이션을 사용하라 (0) | 2020.06.27 |
[Effective Java] item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 (0) | 2020.06.27 |
[Effective Java] item 37. ordinal 인덱싱 대신 EnumMap을 사용하라 (1) | 2020.06.27 |