본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자.

by 돼지왕 왕돼지 2016. 12. 29.
반응형

 [Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자.


API, bounded wild card, collection, Effective JAVA, enum, extendible enum, extends, Generic, implements, Interface, interfacename, opcode, operation code, T, unbounded wild card, 단점, 상속, 상속 가능한 enum, 인터페이스, 작동 코드, 클라이언트, 확장, 확장 가능한 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 메소드들이 그 인터페이스 타입을 인자로 받도록 작성해야 한다.





반응형

댓글