Item 38 - 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
타입 안전 열거 패턴 vs 열거 타입 타입 안전 열거 패턴 public class Operation { public static final Operation PLUS = new Operation("+", (x, y) -> x + y); public static final Operation MINUS = new Operation(...
타입 안전 열거 패턴 vs 열거 타입 타입 안전 열거 패턴 public class Operation { public static final Operation PLUS = new Operation("+", (x, y) -> x + y); public static final Operation MINUS = new Operation(...
[책에 나온 예시] Plant 클래스 class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final LifeCycle lifeCycle; Plant(String name, LifeCycle lifeCycle) { t...
비트 필드 열거 상수 열거한 값들이 집합으로 사용될 경우, 예전에는 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴을 사용해왔다. // 비트 필드 열거 상수 - 구닥다리 기법 public class Text { public static final int STYLE_BOLD = 1 << 0; public s...
전략 패턴 (Strategy Pattern) 이란? 전략 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 전략이란, 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어 있다. 필요할 때 교체할 수 있도록 함으로...
서론 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇번째 위치인지를 반환하는 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개의 원소 타입을 타입 매개변수로 명시 // (타입 매개변수들을 선언하는) 타입 매개변수 목록은 메서드...