전체 글
-
객체 생성과 파괴 - 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라Study/Effective Java 2022. 12. 12. 15:12
자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 유연하지 못한 정적 유틸리티 클래스 public class AutoLottoNumberGenerator { private static final List LOTTO_TOTAL_NUMBERS = IntStream.rangeClosed(1, 45) .boxed() .collect(Collectors.toList()); private AutoLottoNumberGenerator() { } public static List generate(int size) { List lottoTotalNumbers = new ArrayList(LOTTO_TOTAL_NUMBERS); Collections.shuffle(lottoTotalNumbers); return lott..
-
객체 생성과 파괴 - 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라Study/Effective Java 2022. 12. 12. 14:23
인스턴스화를 막으려거든 private 생성자를 사용하라 기본적으로 정적 메서드, 정적 필드만 담은 클래스는 때때로 유용하게 쓰일 수 있다. 사용하는 경우는 아래와 같이 크게 세 가지가 있다. 1. 기본 타입 값이나 배열 관련 메서드를 모은 클래스 예컨대, java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다. public class Arrays { private Arrays() {} public static boolean isArray(Object o) { ... } public static Object[] asObjectArray(Object array) { ... } public sattic List asList(Object array..
-
객체 생성과 파괴 - 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라Study/Effective Java 2022. 12. 12. 13:48
private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴이란? 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. public static final 필드 방식의 싱글턴 생성 public class User { public static final User INSTANCE = new User(); /** private 생성자 */ private User() { ... }; } private 생성자는 public static final 필드인 User.INSTANCE를 초기화할 때 딱 한 번만 호출된다. public이나 protected 생성자가 없으므로 User 클래스가 초기화될..
-
객체 생성과 파괴 - 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라Study/Effective Java 2022. 12. 12. 11:10
생성자에 매개변수가 많다면 빌더를 고려하라 점층적 생성자 패턴 public class User { private final int age; // 필수 private final int phoneNumber; // 필수 private final int weight; // 선택 private final int tall; // 선택 private final int birthday; // 선택 } 생성자와 정적 팩토리 메서드는 똑같은 제약이 하나 있다. 바로, 위 코드와 같이 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 위와 같은 클래스용 생성자 혹은 정적 팩토리 메서드를 위해 프로그래머들은 점층적 생성자 패턴을 즐겨 사용했다. 필수 매개 변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를..
-
객체 생성과 파괴 - 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라Study/Effective Java 2022. 12. 8. 17:21
생성자 대신 정적 팩토리 메서드를 고려하라 정적 팩토리 메서드의 장점 1. 이름을 가질 수 있다. public static Position createStartPosition() { return new Position(START_POSITION_VALUE); } Position position = Position.createStartPosition(); 생성자 자체는 생성되는 객체의 특성을 직관적으로 설명하지 않는다. 위 코드와 같이 메서드명을 명시함으로써 어떠한 객체가 생성되는지 더 구체적으로 알 수 있다. public class Person { String name; String age; public Person(String name) { this.name = name; } public Person(..
-
Java - 스트림(Stream) 최종 처리 메서드의 종류와 사용 방법(3)Language/Java 2022. 12. 1. 16:03
스트림(Stream) 최종 처리 메서드의 종류와 사용 방법(3) 요소를 그룹핑해서 수집 저번 시간에는 그룹핑을 제외한 스트림의 수집 방식에 대해 알아보았다. 이번 게시글에서는 collect() 메서드를 이용해서 그룹핑하는 방법을 알아보겠다. collect() 메서드는 단순히 요소를 수집하는 기능 이외에 컬렉션의 요소들을 그룹핑해서 Map 객체를 생성하는 기능도 제공한다. 여기서 collect() 메서드를 호출할 때 매개 변수로 groupingBy() 또는 groupingByConcurrent() 메서드를 사용하면 된다. 첫 번째는 매개변수로 Function classifier를 사용하는 groupingBy() 메서드이다. 이 메서드의 리턴 타입을 보면, Collector로, T를 K로 매핑한 후, 키가 ..