enum

확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 - [6장. 열거 타입과 애너테이션(아이템38)]
📙 1. 열거 타입의 확장 타입 안전 열거 패턴과 달리 열거 타입은 확장할 수 없다. (이 점을 제외하고는 거의 모든 상황에서 열거 타입이 타입 안전 열거 패턴(typesafe enum pattern) 보다 우수하다.) 타입 안전 열거 패턴은 열거한 값들을 그대로 가져온 다음 값을 더 추가하여 다른 목적으로 쓸 수 있는 반면, 열거 타입은 그렇게 할 수 없다. 설계가 잘 못 된 것은 아니다. 하지만 다음과 같은 이유로 대부분 상황에서 열거 타입을 확장하는 건 좋지 않은 생각이기 때문이다 열거 타입을 확장할 수 없도록 설계한 것이다. 확장한 타입의 원소는 기반 타입의 원소로 취급하지만, 기반 타입의 원소를 확장한 타입의 원소로 취급할 수 없는 건 이상하기 때문이다. 기반 타입과 확장된 타입들의 원소 모두를..

ordinal 인덱싱 대신 EnumMap을 사용하라 - [6장. 열거 타입과 애너테이션(아이템37)]
배열의 인덱스를 얻기 위해 ordinal을 쓰는 거은 일반적으로 좋지 않으니, 대신 EnumMap을 사용하도록 하자. 아래의 2가지 상황(일차원 관계, 다차원 관계)을 통해 왜 EnumMap을 사용해야 하는지 알아보도록 하자. 1. 1차원 관계에서의 EnumMap 아래의 Plant 클래스를 통해 식물의 이름(name)과 생애주기(lifeCycle)를 간단히 나타낼 수 있다. public class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } // 한해살이, 여러해살이, 두해살이 final String name; final LifeCycle lifeCycle; public Plant(String name, LifeCycle lifeCycle) { thi..

비트 필드 대신 EnumSet을 사용하라 - [6장. 열거 타입과 애너테이션(아이템36)]
📙 1. 비트 필드 열거한 값들이 주로 집합으로 사용될 경우, 예전에는 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴을 사용했었다. (비트마스킹을 이용했다고 할 수 있다.) public class Text { public static final int STYLE_BOLD = 1

ordinal 메서드 대신 인스턴스 필드를 사용하라 - [6장. 열거 타입과 애너테이션(아이템35)]
대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 그리고 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공한다. 그래서 열거 타입 상수와 연결된 정숫값이 필요하다면 ordinal 메서드를 사용하면 되지 않을까라는 생각을 할 수 있다. 결론부터 말하자면 그렇게 사용하면 안 된다. '왜 그렇게 사용하면 안 되는지'와 '그러면 언제 ordinal을 사용해야 하는지'에 대해서 알아보자. 📙 1. 열거 타입 상수와 연결된 정숫값을 얻기 위해 ordinal 메서드를 사용하면 안 되는 이유 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONE..

int 상수 대신 열거 타입을 사용하라 - [6장. 열거 타입과 애너테이션(아이템34)] - (2)
이전 글을 통해 '정수 열거 패턴의 단점, 열거 타입의 장점, 열거 타입의 기본 사용법'을 알아보았다. 이번 글에서는 열거 타입의 다양한 기능들에 대해서 알아보도록 하자. 📙 1. 상수별 메서드 구현 (constant-specific method implementation) 사칙연산 계산기와 같이 상수마다 동작이 달라져야 하는 경우가 있다. 가장 간단하게 생각해 볼 수 있는 것은 switch문을 통하여 분기하는 방법이다. public enum Operation { PLUS, MINUS, TIMES, DIVIDE; // 상수가 뜻하는 연산을 수행한다. public double apply(double x, double y) { switch(this) { case PLUS: return x + y; case ..

int 상수 대신 열거 타입을 사용하라 - [6장. 열거 타입과 애너테이션(아이템34)] - (1)
자바를 이용하여 코딩을 하다 보면 정수 열거 패턴(int enum pattern)과 열거 타입(enum type)을 사용해 본 적이 있을 것이다. 이번 글에서는 정수 열거 패턴의 단점들을 살펴보고, 왜 열거 타입을 사용해야 하는지 알아보고자 한다. 그리고 기본적인 열거 타입의 사용법도 알아볼 것이다. 📙 1. 정수 열거 패턴 (int enum pattern) public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ..