728x90
728x90

2022 4

Effective Java 3/E - 6장 열거 타입과 애너테이션 - 2

39. 명명 패턴보다 애너테이션을 사용하라 명명 패턴의 단점 오타가 나면 안 된다. 올바른 프로그램 요소에서만 사용된다는 보장이 없다. 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. 애너테이션 선언 일반적인 정의 방법 public @interface Sample { } JUnit에서 사용하는 @Test 애너테이션 @Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @API(status = STABLE, since = "5.0") @Testable public @interface Test { } 메타 애너테이션 애너테이션 선언에 다는 애너테이션 @Reten..

Effective Java 3/E - 6장 열거 타입과 애너테이션 - 1

34. int 상수 대신 열거 타입을 사용하라 정수 열거 패턴의 단점 표현하기 복잡해진다. 타입 안전을 보장할 방법이 없다. 같은 값을 가지는 다른 값과 동등 비교시 컴파일러 단계에서 걸러낼 방법이 없다. 문자열로 출력하기 어렵고, 같은 열거 그룹의 값들에 대한 순회 방법이 마땅치 않다. 문자열 상수를 적용해도(문자열 열거 패턴), 출력하는 것 이상의 효과가 없고 하드코딩을 피할 수 없다. Enum 자바의 Enum은 완전한 형태의 클래스라서 다른 언어들과 비교해볼 때 더 강력한 Enum이다. Enum 타입 자체는 클래스고, 상수 하나당 자신의 인스턴스를 만들어 public static final로 공개한다. 밖에서 접근 가능한 생성자를 제공하지 않아, 사실상 final이다. 사실상 싱글턴을 일반화한 형태..

Effective Java 3/E - 5장 제네릭 - 2

30. 이왕이면 제네릭 메서드로 만들라 메서드도 제네릭 메서드로 생성이 가능하다. 다음과 같은 정적 유틸리티 메서드가 제네릭 메서드의 대표적인 예시다. 타입 매개변수들을 선언하는 매개변수 목록은 메서드의 제한자와 반환 타입 사이에 위치한다. public static int binarySearch(List, Object>)를 사용하는데, Map 자체가 아닌 Key에 와일드카드 타입을 사용하고 있어서, 아무 타입이나 넣을 수 있다. 즉, 모든 키가 서로 다른 매개변수화 타입으로, 다양한 타입을 지원할 수 있다. Object인 Value - 모든 값이 Key로 명시한 타입임을 보장하지 않음 getFavorite의 type.cast Value는 Object이나 실제 반환은 T가 되어야 하므로, cast를 수행 ..

Effective Java 3/E - 5장 제네릭 - 1

26. Raw Type은 사용하지 말라 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면 제네릭 클래스/인터페이스라고 한다. 제네릭 클래스와 인터페이스를 합쳐 제네릭 타입이라고 한다. 각 제네릭 타입은 매개변수화 타입을 정의하며, 안에 실제 타입 매개변수를 나열한다. 제네릭 타입을 하나 정의하면 Raw 타입, 타입 매개변수를 전혀 사용하지 타입이 정의된다. Raw Type 사용으로 인해, 제네릭이 가져오는 안전성과 표현력을 모두 상실한다. List와 List는 엄연히 다르다. List는 컴파일러에 모든 타입 허용을 명확히 전달한 것 List는 제네릭에서 완전히 벗어난 것 List는 Raw Type의 하위 타입이지만, 타입을 명시한 List의 하위는 아님 원소의 타입을 몰라도 되는 경우가 필요하다면 Lis..

728x90