공부방/이펙티브 자바 2

ordinal 메서드 대신 인스턴스 필드를 사용하라(아이템 35) - Enum

Enum에서 제공해주는 ordinal메서드는 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환한다. 이런 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal메서드를 사용하고 싶을 텐데 유지보수 하기 매우매우 끔찍하다 여기서 만약 새로운 상수를 모르고 앞에다 추가했다면 APPLE의 정수값이 0 => 1로 바뀌고 이미 ordinal를 이용하여 코드를 작성했다면 이곳저곳에서 컴파일은 정상적으로 작동하고 런타임때 오류를 범할 것 이다. Enum의 API문서를 보면 ordinal에 대해 이렇게 쓰여 있다. "대부분 프로그래머는 이 메서드를 쓸 일이 없다. 이 메서드는 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다." 따라서 이런 용도가 아니라면 o..

int 상수 대신 열거 타입을 사용해라(아이템 34) - Enum

자바에서 열거 타입을 지원하기 전에는 다음 코드처럼 정수 상수를 한 묶음에 선언해서 사용했다 정수 열거 패턴 단점 타입 안전 (type safety)를 보장할 방법이 없다 타입 안전이 보장되지 않아 동등연산자로 비교하더라도 컴파일러에서 오류를 잡지 못하고 런타임때 오류가 발생할 가능성이 있음 접두어를 써서 이름 충돌을 방지시켜야 한다 상수의 값이 바뀌면 반드시 다시 컴파일 해야한다 정수 상수는 문자열로 출력하기가 다소 까다롭다 문자열 열거 패턴으로 위의 문제를 해결할 수 있겠지만 문자열 값을 개발자가 하드코드 하기에 더 나쁘다 자바의 열거 타입 특징(장점) 열거타입 자체는 클래스이며, 상수 하나당 자신의 인스턴스를 하나씩 만들어 public static final 필드로 공개한다 열거타입은 밖에서 접근할..