(자바) EffectiveJava int 상수대신 enum을 사용

* int enum 상수는 컴파일 시점 상수 이기 때문에 상수를 사용하는 클라이언트 코드와 함께 컴파일 된다.

* 상수의 int값이 변경되면 클라이언트도 다시 컴파일 해야 한다.

* 자바의 enum은 C, C++, C#과 같은 언어에서 제공하는 enum자료형과 비슷해보이지만 그렇진 않다. 자바의 enum 자료형은 완전한 기능을 갖춘 클래스로 다른언어의 enum보다 강력하다. 다른언어들의 enum은 int값이지만 자바는 public static final int이다.

즉, 클라이언트가 접근할 수 있는 생성자가 없기 때문에 클라이언트의 enum 자료형으로 새로운 객체를 생성하거나 계승을 통해 확장할 수 없다.

* enum자료형은 싱글턴 패턴을 일반화 한것과 같다.

* 상수를 추가하거나 순서를 변경해도 클라이언트는 다시 컴파일 할 필요없다. 상수를 제공하는 필드가 enum 자료형과 클라이언트 사이에서 격리계층 구실을 하기 때문이다.
또한, toString()메소드 호출 가능

*또한 enum자료형은 메소드나 필드를 추가할 수 있다. 그 잉는 Applie과 Orange자료형의 경우 과일의 색이나 사진을 반환하는 메소드를 추가하면 좋은 아이디어 이기 떄문이다.

* enum은 원래 변경 불가능 하므로 (immutable) 모든 필드는 final로 선언되어야 한다.

* enum 은 int 상수와 성능 면에서 비등하다. 자료형을 메모리에 올리고 초기화하는 공간적/시간적 비용 때문에 약간 손해를 보긴한다. 그러나 휴대전화나 토스터기 처럼 시스템 자원에 민감한 기기에 돌릴 프로그램이 아니라면, 실제로는 별 차리를 느낄 수 없다.



댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기