본문 바로가기

Java/이펙티브 자바

이펙티브 자바 - 6장 열거타입과 애너테이션

int 상수 대신 열거 타입을 사용하라.

상수대신 Enum 을 사용하자. 훨씬 안전하고 강력하다

각 상수를 특정 데이터와 연결하거나 상수마다 다르게 동작하게 할때 생성자나 메서드가 필요하다.

switch 문 대신 상수별 메서드 구현을 사용.

 

ordinal 메서드 대신 인스턴스 필드를 사용하라.

열거형에서 몇번째인지를 반환하는 ordinal 메서드를 사용하지말자 .ordinal 은 enum base 자료구조(EnumSet, Enum Map)에서 쓰이기 위해 만들어진 것

 

상수 선언을 변경하면 바로 오동작한다

필드에 값을 넣어서 사용해주는게 맞다

 

비트 필드 대신 EnumSet을 사용하라.

 

과거에는 비트를 이용새 합집합, 교집합 같은 집합 연산을 효율적으로 할 수 있었지만,

비트 결과는 해석하기가 어렵다.

또한, 비트 필드에 포함된 원소를 순회하기도 어렵고 최대 몇 비트가 필요한지 예측 후 타입을 정해야한다. 비트를 늘릴 수 없기 때문에.

 

이걸 EnumSet 을 사용해 해결 할 수 있다.

 

 

ordinal 인덱싱 대신 EnumMap을 사용하라

ordinal 은 선언 순서가 변환되면 값이 변경되서 위험하다.

 

EnumMap 을 사용해서 안전하게 사용할수있다.

 

 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라

 

 

enum 에서 확장은 대부분 좋지 않지만, 

위 같이 반복되는 Operation 을 추가하기에는 확장이 어울릴 수 있다.

interface 를 구현해서 사용 가능하다.

 

명명 패턴보다 애너테이션을 사용하라

명명패턴 대신 애너테이션을 써라

나중에 다시 정리

 

@Override 애너테이션을 일관되게 사용하라

Override 를 붙이면 컴파일단에서 에러를 확인 할 수 있다.

 

정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

 

마커 인터페이스(marker interface)란, 아무 메서드도 갖고 있지 않고 단지 자신을 구현하는 클래스가 특정 속성을 갖는 것을 표현해주는 인터페이스를 말한다.

 

마커인터페이스를 사용하면 ,

타입 체크가 가능해서 컴파일 시에 클래스 타입오류를 발견할 수 있다.

 

적용대상 클래스나 메소드에 마커 인터페이스 만 붙여서 적용대상을 지정 할 수 있다.

 

반면 마커 어노테이션은?

적용대상은 마커 인터페이스 처럼 면밀히 넣을 순 없지만,

어노테이션 시스템에 강력한 기능들을 쓸 수 있다.

 

각자 맞는 사용처가 있다.