반응형
[Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자. |
-
대개의 경우 enum 의 확장은 좋지 않은 생각으로 밝혀졌다.
-
확장 가능한 enum 타입을 사용해야 할 경우가 최소한 한 가지가 있는데,
작동 코드(operation code) 또는 opcode 라고 하는 것으로
특정 머신의 작동을 나타내는 요소들을 갖는 enum 타입이다.
-
인터페이스를 구현한 enum 에 generic 을 설정할 경우는 아래와 같이 할 수 있다.
bounded wild card
<T extends Enum<T> & InterfaceName> Class<T> opSet
// class 객체가 enum 과 Operation 서브 타입 모두임을 나타냄.
unbounded wild card
Collection<? extends InterfaceName>
-
enum 은 하나의 enum 타입에서 다른 enum 으로 상속 받을 수 없는 단점이 있다. ( 보통 확장은 좋은 생각 X )
Summary
확장(상속) 가능한 enum 타입을 작성할 수는 없지만, 인터페이스를 만들어서 그것을 구현하는 기본 enum 타입과 함께 사용하면 유사하게 만들 수 있다.
클라이언트는 그 인터페이스를 구현하는 자신들의 enum 을 작성할 수 있다.
기본 enum 타입이 사용될 수 있는 곳이면 어디든 자신들의 enum 을 사용할 수 있다.
물론 API 메소드들이 그 인터페이스 타입을 인자로 받도록 작성해야 한다.
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] Override 주석을 일관성 있게 사용하자. (0) | 2017.01.03 |
---|---|
[Effective Java] 작명 패턴보다는 주석(annotation)을 사용하자. (0) | 2017.01.02 |
[Effective Java] ordinal 인덱스 대신 EnumMap 을 사용하자. (0) | 2016.12.27 |
[Effective Java] 비트(bit) 필드 대신 EnumSet 을 사용하자. (0) | 2016.12.26 |
[Effective Java] ordinal 대신 인스턴스 필드를 사용하자. (0) | 2016.12.20 |
댓글