Reading Book/이펙티브 자바

    [이펙티브 자바] private 생성자나 열거 타입으로 싱글턴임을 보증하라

    싱글턴(Singleton) 싱글턴: 인스턴스를 오직 하나만 생성할 수 있는 클래스 무상태(stateless) 객체 설계상 유일해야 하는 시스템 컴포넌트 클래스를 싱글턴으로 만들면 테스트하기가 어려워질 수 있다. 타입을 인터페이스로 정의하여 구현체를 만든 싱글턴이 아니라면, 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문 싱글턴 만드는 방식 1) public static 멤버가 final 필드인 방식 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public void leaveTheBuilding() {...} } Elvis 클래스가 초기화될 때 만들어진 인스턴스가 전체 시스템에서 ..

    [이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라

    [이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라

    생성자나 정적 팩터리에 선택적 매개변수가 많을 때 대응하기가 어렵다. 매개변수가 많은 경우 어떤 식으로 개발자들은 처리했는지 다음을 봐보자. 1. 점층적 생성자 패턴 프로그래머들은 선택적 매개변수에 대응하는 방법으로 점층적 생성자 패턴을 이용하였다. 필수 매개변수만 받는 생성자 필수 매개변수 + 선택 매개변수 1개를 받는 생성자 필수 매개변수 + 선택 매개변수 2개를 받는 생성자 ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려 만드는 방식이다. 보통 이런 점층적 생성자 패턴 방법을 사용하면 사용자가 설정하길 원치 않는 매개변수까지 포함할 수 있는데, 어쩔 수 없이 그런 매개변수에도 값을 지정해줘야 한다. 때문에 매개변수 개수가 많아지면 클라이언트 코드의 가독성 및 작성이 어려워진다. 2. 자..

    [이펙티브 자바] 생성자 대신 정적 팩터리 메소드를 고려하라

    [이펙티브 자바] 생성자 대신 정적 팩터리 메소드를 고려하라

    정적 팩터리 메소드가 생성자보다 좋은 장점 1. 이름을 가질 수 있다. 한 클래스에 시그니처가 같은 생성자가 여러 개가 되면 생성자만으로는 각각의 차이를 들어내기가 쉽지 않다. 정적 팩터리 메소드를 사용하면 각각의 차이가 잘 드러나게 할 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. 생성 비용이 큰 객체가 자주 요청되는 상황이라면 이와 같은 방식이 성능을 올려준다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } //객체를 생성하지 않는 예 Boo..