전체 글63 [item 34] int 상수 대신 열거 타입을 사용하라 열거 타입(Enum)일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 자바에서 서로 연관있는 상수를 편리하게 관리하기 위해 사용한다. 요일, 순위, 성적 등을 나타내기 위해 사용한다. public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}1. 정수 열거 패턴 (int enum pattern)자바에서 열거 타입을 지원하기 전에는 다음 코드처럼 정수 상수를 한 묶음 선언해서 사용하곤 했다. public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public sta.. 2025. 2. 13. [item 33] 타입 안전 이종 컨테이너를 고려하라. 타입 안전 이종 컨테이너 패턴제네릭은 Set, Map 등의 컬레션과 ThreadLocal, AtomicReference 등의 단일원소 컨테이너에도 흔히 쓰인다. 여기서, 매개변수화되는 대상은 (원소가 아닌) 컨테이너 자신이다. // ✅ Set이 매개변수화됨Set numberSet = new HashSet();// ✅ List가 매개변수화됨List numberList = new ArrayList();// ✅ Map이 매개변수화됨Map idToName = new HashMap(); Set에서 제네릭이 적용된 대상은 Set다. List에서 제네릭이 적용된 대상은 List다. Map에서 제네릭이 적용된 대상은 Map이다. 타입 안전 이종 컨테이너 패턴(type safe heterogeneous con.. 2025. 2. 7. [item 32] 제네릭과 가변인수를 함께 쓸 때는 신중하라 1. 가변인수와 제네릭을 혼용하면 타입 안정성이 흔들린다.가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. 그런데 내부로 감춰야 했을 이 배열을 그만 클라이언트에 노출하는 문제가 생겼다. 그 결과 varags 매개변수에 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고가 발생한다. ✔️ 예시 : 제네릭과 varags를 혼용하면 타입 안정성이 깨진다.매개변수화 타입의 변수가 타입이 다른 객체를 참조하면 힙 오염이 발생한다. 다음 메서드를 예로 생각해보자. 이 메서드에서는 형변환하는 곳이 보이지 않는데도 인수를 건네 호출하면 ClassCastException을 던진다. 마지막 줄에 컴파일러가 생성한 (보이지 않는) 형변환이 숨어 있기 때문이다. .. 2025. 2. 6. [item 31] 한정적 와일드카드를 사용해 API 유연성을 높여라 매개변수화 타입의 불공변매개변수화 타입은 불공변(invariant)이다. 서로 다른 타입 Type1과 Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아니다. 즉, List은 List의 하위 타입이 아니다라는 뜻이다.매개변수화 타입은 리스코프 치환 원칙에 어긋난다. List은 List가 하는 일을 제대로 수행하지 못하니 하위 타입이 될 수 없다. List은 String 문자열만 넣을 수 있다.예시 : Stack의 pushAll()Stack의 pushAll()을 작성하여 일련의 원소를 스택에 넣으려고 한다. Iterable src의 원소 타입이 스택의 원소 타입과 일치하면 잘 작동한다. import java.util.*;// Generic stack with bulk meth.. 2025. 2. 5. 이전 1 2 3 4 5 ··· 16 다음