열거타입

    [Effective Java] ordinal 메서드 대신 인스턴스 필드를 사용하라

    ordinal 메서드 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메서드를 제공한다. public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET; public int numberOfMusicians() { return ordinal() + 1; } } ordinal 메서드의 문제를 유지보수성에 있다. 상수 선언을 바꾸는 순간 numberOfMusicians가 오동작하며, 이미 사용중인 정수와 같이 값이 같은 상수는 추가할 수 없다. ordinal은 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었으므로 이런 용도가 아니라면 이 메서..

    [Effective java] int 상수 대신 열거 타입을 사용하라

    정수 열거 패턴 정수 상수를 한 묶음 선언해서 사용하는 패턴 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 ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; 정수 열거 패턴에는 다음과 같은 문제가 있다. 1. 타입 안전을 보장할 방법이 없다. public class IntegerEnumeration { public static void makeSa..

    [Effective Java] private 생성자나 열거 타입으로 싱글턴임을 보증하라

    싱글턴 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴을 만드는 방식은 보통 둘 중 하나이다. 1. 생성자를 private으로 감추고 public static 멤버 변수를 만든다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {}; } [장점] 이 방법은 JavaDocs를 만들 때 싱글턴임이 API에 명백히 드러난다는 장점이 있다. 또 한 간결하다는 특징이 있다. [단점] 권한이 있는 클라이언트의 경우 리플렉션을 사용해서 private 생성자를 호출할 수 있다. => 이를 방지하기 위해 생성자를 수정하여 두 번째 객체가 생성되려 할 때 예외를 던질 수 있다. publi..