형 안전 enum 패턴을 쓸 경우에는 다른 열거 자료형을 계승해서 새로운 열거 자료형을 만드는 것이 가능하지만 enum 자료형으로는 그럴 수 없다. 그러나 이것을 단점으로 볼 수는 없는데, enum 자료형을 계승한다는 것은 대체로 바람직하지 않기 때문이다. 하지만 열거 자료형의 확장이 가능하면 좋은 경우가 있는데 연산코드를 만들어야 할 때이다. 때로는 API 사용자가 API가 기본 제공하는 연산 집합을 확장하여 자기만의 연산을 추가할 수 있도록 해야할 때가 있기 때문이다
이러한 연산 자료형의 확장은 Enum 자료형이 임의의 이넡페이스를 구현할 수 있다는 사실을 이용하는 것이다.
BasicOperation은 enum자료형이라 계승할 수 없지만 Operation은 인터페이스라 확장이 가능하다. API가 사용하는 모든 연산은 이 인터페이스로 표현한다. 따라서 이 인터페이스를 계승하는 새로운 ENUM 자료형을 만들면 Operation 객체가 필요한 곳에 해당 enum 자료형의 상수를 이용할 수 있다.
인터페이스를 사용해 확장 가능한 enum 자료형을 만드는 방법에는 한 가지 사소한 문제가 있다. enum 구현 자체는 계승할 수 없다는 것이다. 공유해야 하는 부분이 많아질 수록 중복코드가 많아지게 된다(인터페이스를 다 구현해야 하니까). 공유가 되는 기능은 도움 클래스 (helper class)나 정적 도움 메서드(static helper method)에 구현하여 중복을 최소화 해야한다.
요약
계승 가능 enum 자료형은 만들 수 없지만, 인터페이스를 만들고 그 인터페이스를 구현하는 기본 enum 자료형을 만들면 계승 가능 enum 자료형을 흉내낼 수 있다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[열거형과 어노테이션]규칙36. Override 어노테이션은 일관되게 사용하라 (0) | 2017.05.04 |
---|---|
[열거형과 어노테이션]작명 패턴 대신 어노테이션을 사용하라 (0) | 2017.05.04 |
[열거형과 어노테이션]규칙33. ordinal을 배열 첨자로 사용하는 대신 EnumMap을 이요하라 (0) | 2017.05.03 |
[열거형과 어노테이션]규칙32. 비트 필드대신 EnumSet을 사용하라 (0) | 2017.05.03 |
[열거형과 어노테이션]규칙31. ordinal 대신 객체 필드를 사용하라 (0) | 2017.05.03 |