이야기박스

Effective java 3/E - 열거타입 & 어노테이션 (item 34~41) 본문

Programming Language/JAVA

Effective java 3/E - 열거타입 & 어노테이션 (item 34~41)

박스님 2018. 12. 13. 14:36
반응형

Item 34. int 상수 대신 열거 타입을 사용하라

정수 열거 패턴 --> namespace가 없음

==> enum은 클래스 형태 (namespace 제공)


enum --> public static final field 제공

==> 싱글턴의 일반화한 형태


* 에러 모듈 생성해서 여러 곳에서 사용하게 할 수 도 있음

Item 35. ordinal 메서드 대신 인스턴스 필드를 사용하라

ordinal 메서드 --> 해당 상수가 열거 타입에서 몇번째인가?

==> 유지보수 측면에서 힘듬

--> 순서 바뀌면 어떻게 할 것인가?

===> 그냥 인스턴스 필드로 표시하자! 


Item 36. 비트 필드 대신 EnumSet을 사용하라

비트 필드 : 비트별 or 연산을 사용하여 여러 상수를 하나의 집합으로 모을 수 있게 하는 것

==> 정서 열거 상수의 단점을 그대로 가지고 있음

==> EnumSet으로 표현

(Set 인터페이스 구현 --> Set 구현체와도 사용 가능)


Item 37. ordinal 인덱싱 대신 EnumMap을 사용하라

ordinal은 ㄴㄴ, 별로임 --> EnumMap 사용할 것

다차원인 경우 --> EnumMap<..., EnumMap<,,,>>

어플리케이션 프로그래머라면 Enum.ordinal() 지양할 것


groupingBy( 00, map 지정 , 00)


Enum이 중첩되면? --> 중첩맵 사용할 것

Item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라

인터페이스 더하면 열거 타입도 확장 가능 --> Enum 객체에서 interface method  구현해야함


Item 39. 명명 패턴보다 어노테이션을 사용하라


Item 40. @Override 어노테이션을 일관되게 사용하라

모든 경우에 어노테이션 달 것!
단 예외, 구체 클래스에서 상위 클래스의 추상 메서드를 재정의한 경우 --> (?)

Item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

[Serializable 예시]
* Serializability of a class is enabled by the class implementing the
* java.io.Serializable interface. Classes that do not implement this
* interface will not have any of their state serialized or
* deserialized. All subtypes of a serializable class are themselves
* serializable. The serialization interface has no methods or fields
* and serves only to identify the semantics of being serializable. <p>
마커 인터페이스의 마커 어노테이션에 대한 장점
- 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있음 (마커 어노테이션 -- 런타임에 알 수 있음)
- 적용 대상을 더 정밀하게 지정 가능 ~ Set 도 마커 인터페이스의 일종

마커 어노테이션의 장점 --> 어노테이션 시스템

상황에 따라 잘 쓰자 !!



반응형