Dev Book Review Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 40. @Override 애너테이션을 일관되게 사용하라 1. @Override를 사용했을 때 장점 @Override : 메서드 선언에만 달 수 있다. 상위 타입의 메서드를 재정의했음을 뜻한다. Overriding을 Overloading로 잘못 작성할 수 있는 오류를 방지 할 수 있다. 잘못 작성 했을 경우, 컴파일시 컴파일러가 잘못된 부분을 명확히 알려준다. 대부분의 IDE에서 의도한 재정의를 상위 클래스의 메서드를 재정의하려는 모든 메서드에 @Override 애너테이션을 달자 컴파일 오류의 보완재 역할이다. @Override를 다는 습관을 들이자! 시그니처가 올바른지 재차 확신할 수 있다. 2. @Override를 작성하지 않아도 되는 예외 경우 구체 클래스에서 상위 클래스의 추상 메서드를 재정의할 때 (이때 밖에 없다.) 구체 클래스인데 구현하지 않은 메.. Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 39. 명명 패턴보다 애너테이션을 사용하라 1. 명명 패턴의 단점 ex) junit3 : 테스트 메서드의 시작을 test로 시작하게 하였다. 오타가 나면 안된다. 올바른 프로그램 요소에서만 사용되리라 보증할 방법이 없다. 메서드가 아닌 클래스 명을 TestSafetyMechanisms으로 지었을 때 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. 예외를 던져야 성공하는 테스트 : 방법이 없다. 2. 마커(marker) 애너테이션 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Test { } 메타 애너테이션 (meta-annotation) : 애너테이션 선언에 다는 애너테이션 @Retention(RetentionPolicy.RUNTIME) :.. Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 1. 열거타입 확장은 하지 말자 열거 타입은 거의 모든 상황에서 타입 안전 열거 패턴(typesafe enum pattern)보다 우수하다. 단점 : 타입 안전 열거 패턴은 확장할 수 있으나 열거 타입은 그렇지 못하다 타입 안전 열거 패턴의 예시 public class DSymbolType{ private final String type; private DSymbolType(String type){ this.type = type; } public String toString(){ return type; } public static final DSymbolType Terminal = new DSymbolType("Terminal"); public static final DSymbolType Process .. Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 37. ordinal 인덱싱 대신 EnumMap을 사용하라 1. 올바르지 않은 방법 : ordinal()을 배열 인덱스로 사용 Set[] plant ByLisfeCycle = (Set[]) new Set[Plant.LifeCycle.values().length]; for(int i =0; i p.lifeCycl.. Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 36. 비트 필드 대신 EnumSet을 사용하라 1. 비트 필드란? 비트 필드 : 비트별 OR를 사용해 여러 상수를 하나의 집합으로 모을 수 있는 집합 public class Text{ public static final int STYLE_BOLD = 1 Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 35. ordinal 메서드 대신 인스턴스 필드를 사용하라 1. ordinal 메서드를 잘못쓸 때 ordinal 메서드 : 해당 상수가 그 열거 타입에서 몇 번째 위치인지 반환하는 메서드 상수 선언 순서를 바꾸면 오동작한다. 이미 사용중인 정수와 값이 같은 상수는 추가할 수 없다. 중간에 값을 비울 수 없다 : 값을 비우기 위한 더미(dummy) 상수 추가 2. 해결 방법 열거 타입 상수에 연결 된 값을 ordinal 메서드로 얻지 말고 인스턴스 필드에 저장하라. 3. Enum API 문서 이 메서드는 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료 구조에 쓸 목적으로 설계 되었다. Dev Book Review/Effective Java 2020. 6. 27. [Effective Java] item 34. int 상수 대신 열거 타입을 사용하라 열거타입 (enum) : 일정 개수의 상수 값을 정의한 다음 그외의 값은 허용하지 않는 타입 정수 열거 패턴 (int enum pattern) : 이전까지 사용하던 패턴 1. 정수 열거 패턴 (int enum pattern)의 단점 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; 타입 안전을 보장할 .. Dev Book Review/Effective Java 2020. 5. 19. [Effective Java] Chapter 5: 제네릭 용어정리 한글 영문 예 매개변수화 타입 parameterized type List 실제 타입 매개변수 actual type parameter String 제네릭 타입 generic type List 정규 타입 매개변수 formal type parameter E 비한정적 와일드카드 타입 unbounded wildcard type List 로 타입 raw type List 한정적 타입 매개변수 bounded type parameter 재귀적 타입 한정 recursive type bound 한정적 와일드카드 타입 Bounded wildcard type 로타입 : 제네릭 타입 시스템에 속하지 않는다. Set Set, Set는. 안전하지만, 로타입인 Set은 안전하지 않다. Link : jyami.tistory... 이전 1 2 3 4 5 ··· 8 다음