int 상수 대신 열거 타입을 사용하라.
상수대신 Enum 을 사용하자. 훨씬 안전하고 강력하다
각 상수를 특정 데이터와 연결하거나 상수마다 다르게 동작하게 할때 생성자나 메서드가 필요하다.
switch 문 대신 상수별 메서드 구현을 사용.
ordinal 메서드 대신 인스턴스 필드를 사용하라.
열거형에서 몇번째인지를 반환하는 ordinal 메서드를 사용하지말자 .ordinal 은 enum base 자료구조(EnumSet, Enum Map)에서 쓰이기 위해 만들어진 것
필드에 값을 넣어서 사용해주는게 맞다
비트 필드 대신 EnumSet을 사용하라.
과거에는 비트를 이용새 합집합, 교집합 같은 집합 연산을 효율적으로 할 수 있었지만,
비트 결과는 해석하기가 어렵다.
또한, 비트 필드에 포함된 원소를 순회하기도 어렵고 최대 몇 비트가 필요한지 예측 후 타입을 정해야한다. 비트를 늘릴 수 없기 때문에.
이걸 EnumSet 을 사용해 해결 할 수 있다.
ordinal 인덱싱 대신 EnumMap을 사용하라
ordinal 은 선언 순서가 변환되면 값이 변경되서 위험하다.
EnumMap 을 사용해서 안전하게 사용할수있다.
확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
enum 에서 확장은 대부분 좋지 않지만,
위 같이 반복되는 Operation 을 추가하기에는 확장이 어울릴 수 있다.
interface 를 구현해서 사용 가능하다.
명명 패턴보다 애너테이션을 사용하라
명명패턴 대신 애너테이션을 써라
나중에 다시 정리
@Override 애너테이션을 일관되게 사용하라
Override 를 붙이면 컴파일단에서 에러를 확인 할 수 있다.
정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
마커 인터페이스(marker interface)란, 아무 메서드도 갖고 있지 않고 단지 자신을 구현하는 클래스가 특정 속성을 갖는 것을 표현해주는 인터페이스를 말한다.
마커인터페이스를 사용하면 ,
타입 체크가 가능해서 컴파일 시에 클래스 타입오류를 발견할 수 있다.
적용대상 클래스나 메소드에 마커 인터페이스 만 붙여서 적용대상을 지정 할 수 있다.
반면 마커 어노테이션은?
적용대상은 마커 인터페이스 처럼 면밀히 넣을 순 없지만,
어노테이션 시스템에 강력한 기능들을 쓸 수 있다.
각자 맞는 사용처가 있다.
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - 8장 메서드 (0) | 2020.12.29 |
---|---|
이펙티브 자바 - 7장 람다와 스트림 (0) | 2020.12.29 |
이펙티브 자바 - 5장 제네릭 (0) | 2020.12.23 |
이펙티브 자바 - 4장 클래스와 인터페이스 (0) | 2020.12.21 |
이펙티브 자바 - 3장 객체의 공통 메소드 (0) | 2020.12.21 |