본문 바로가기

IT Books Review/이펙티브 자바3

아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 예를 들어 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 영양 정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리같은 필수 항목 몇 개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런데 대부분 제품은 이 선택 항목 중 대다수의 값이 0이다. 점층적 패턴 프로그래머들은 이럴 때 점층적 생성자 패턴을 즐겨 사용했다. 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 .. 2023. 4. 23.
아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 하지만 모든 프로그래머가 꼭 알아둬야 할 기법이 하나 더 있다. 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드말이다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 이 방식에는 장점과 단점이 모두 존재한다. 장점 1. 이름을 가질 수 있다. 하나의 시그니처로는 생성자를 하나만 만들 수 있다. 입력 매개변수들의 순서를 다르게 한 생성자를 새로 추가하는 방식으로 이 제한을 피해볼 수도 있지만 좋지 않은 발상이다. 이름.. 2023. 4. 13.
[이펙티브 자바] 2장 객체 생성과 파괴 Chapter 2. 객체의 생성과 파괴 객체의 생성 Item 1. Constructor 대신 Static Factory Method를 고려하라. Laptop Class public class Laptop { private String model; private String company; } Constructor public Laptop(String modelName, String company) { this.modelName = modelName; this.company = company; } 이름을 가진 Static Factory Method public static Laptop ofModelNameAndCompany(String modelName, String company) { Laptop lap.. 2018. 11. 22.