Item 35 - ordinal 메서드 대신 인스턴스 필드를 사용하라
서론 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇번째 위치인지를 반환하는 ordinal 메서드를 제공한다. ordinal을 잘못 사용한 예 public enum Number { ONE, TWO, THREE, FOUR; public int convert...
서론 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇번째 위치인지를 반환하는 ordinal 메서드를 제공한다. ordinal을 잘못 사용한 예 public enum Number { ONE, TWO, THREE, FOUR; public int convert...
정수 열거 패턴(int enum pattern) 열거 타입이 자바에 추가되기 전엔 정수 상수를 열거하는 취약한 방법을 사용했다. public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMIT...
서론 제네릭은 Set<E>, Map<K, V> 등의 컬렉션과 ThreadLocal<T> 등의 단일 원소 컨테이너에 흔히 쓰인다. 하나의 컨테이너에서 매개변수화 할 수 있는 타입의 수는 컴파일 타임에 고정된다. 더 유연한 수단이 필요할 때는? 타입 안전 이종 컨테이너 고정된 타입의 객체만 담을 수 있는 컨테...
가변인수와 제네릭 가변인수 메서드와 제네릭은 자바 5 때 함께 추가되었지만 잘 어우러지지 않는다. 🙅 가변인수 메서드 구현방식의 허점 🤔 가변 인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. 이 배열을 내부로 감췄어야 했는데, 클라이언트에 노출해버려서 제네릭이나 매개변수화 타입이 포함되면 컴파일 경고...
매개변수화 타입은 불공변이다. List<Object>는 List<String>의 하위 타입도 상위 타입도 아니다. List<String>은 List<Object>가 하는 일을 제대로 수행하지 못한다. 리스코프 치환법칙에 어긋난다. (아이템 10) 때로는 불공...
제네릭 메서드 메서드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭 메서드이다. ex. Collections의 binarySearch, sort 메서드 // 메서드 선언에서 입력 2개와 반환 1개의 원소 타입을 타입 매개변수로 명시 // (타입 매개변수들을 선언하는) 타입 매개변수 목록은 메서드...
아이템 7에서 다룬 스택 코드 이 클래스는 원래 제네릭 타입이어야 마땅하다. // Object 기반 스택 - 제네릭이 절실한 강력 후보! public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INI...
배열과 제네릭의 차이 1) 배열은 공변, 제네릭은 불공변이다. 배열 : Sub가 Super의 하위타입이면 배열 Sub[]는 배열 Super[]의 하위타입이다. 제네릭 : 서로 다른 T1, T2가 있을 때, List<T1>는 List<T2>의 하위타입도 상위타입도 아니다. // 배열 : 런타임에 실패한다. Object...
제네릭을 사용하면 수많은 컴파일러 경고를 볼 수 있다. (비검사 경고) ex. 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고 등 비검사 경고 예시 Set<String> words = new HashSet(); 위 코드에서는 다음과 같은 경고를 볼 수 있다. Raw use of parame...
클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 또 이들을 통틀어 제네릭 타입이라고 한다. 로 타입(raw type) 제네릭 타입을 하나 정의하면 그에 딸린 로 타입(raw type)도 함께 정의된다. 제네릭 타입에서 타입 매개변수를 사용하지 않을 때를 로 타입이라고 한다. ...