반응형

이펙티브 자바 3

[제네릭] 컬렉션이나 단일 원소 컨테이너에서 매개변수화 되는 대상은 무엇일까?

이펙티브 자바 "아이템 33 - 타입 안전 이종 컨테이너를 고려하라"를 읽는 도중, 한 구문이 이해가 되지 않았습니다. 다음은 이펙티브 자바 198쪽에 나오는 문단입니다. 제네릭은 Set, Map 등의 컬렉션과 ThreadLocal, AtomicReference 등의 단일원소 컨테이너에도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 (원소가 아닌) 컨테이너 자신이다. 따라서 하나의 컨테이너에서 매개변수화할 수 있는 타입의 수가 제한된다. 컨테이너의 일반적인 용도에 맞게 설계된 것이니 문제될 건 없다. 예컨대 Set에는 원소의 타입을 뜻하는 단 하나의 타입 매개변수만 있으면 되며, Map에는 키와 값의 타입을 뜻하는 2개만 필요한 식이다. 저는 2번째 줄인 "이런 모든 쓰임에서 매개변수화되는 대..

개발 2022.02.20

[아이템 02] 생성자에 매개변수가 많다면 빌더를 고려하라

Start Quiz 질문 1. 생성자와 아이템 1에서 다룬 정적 팩터리 중에서 선택적 매개변수가 많을 때 적절히 대응할 수 있는 방식은? 정답 둘 다 적절히 대응하기 어렵습니다. 선택적 매개변수가 많을 때는 빌더를 고려해야 합니다. 본 내용 문제 상황 매개변수가 많은 클래스를 생성하고 싶다! 해결책 1. 점층적 생성자 패턴 (not the best) 선택적 매개변수가 많은 경우, 프로그래머들은 점층적 생성자 패턴(telescoping constructor pattern)을 즐겨 사용했다. 아래의 코드는 점층적 생성자 패턴의 책 내 예시를 변형한 코드이다. public class NutritionFacts { private final int servingSize; // 필수 private final int..

[아이템 01] 생성자 대신 정적 팩터리 메서드를 고려하라

Quiz 질문 1. true, false를 나타내는 인스턴스를 매번 생성해야하는 문제는 어떻게 해결할 수 있을까? 정답 아래 코드와 같이 Boolean 클래스 내에 선언된 static final 변수를 가져오면 된다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 질문 2. 아래 테스트 코드의 결과는 true 인가 false 인가? public static void main(String[] args) throws IOException { Boolean bool = true; Boolean bool2 = true; Boolean bool3 = Boolean.TRUE; Boolean bool4 = Bo..

반응형