728x90
728x90
(이번 장은 잘 이해하지 못하는 부분이 많았다. 2회독 3회독을 하면서 이 부분이 점점 익숙해지기를 바란다..) 싱글톤(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 대표적인 예는 함수와 같은 무상태(stateless) 객체나 (설계상 유일해야하는) 시스템 컴포넌트가 있다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식은 보통 둘 중 하나이다. 두 방식 모두 생성자는 private로 감춰두고, 유일한 인스턴스에 접근하는 수단으로 public static 멤버를 하나 만든다. 첫번째 방법. public static 멤버가 final 필..
아이템 1에서 언급한 정적 팩터리와 생성자에게는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 공통적인 제약사항이 있다. 식품 포장의 영양정보를 포함하는 클래스를 생각해보자. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리같은 필수 항목 몇개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런데 대부분 제품은 이 선택 항목 중 대다수의 값이 0이다. 이런 클래스용 생성자 혹은 정적 팩터리는 어떤 모습일까? 프로그래머들은 이럴 때 점층적 생성자 패턴(telescoping constructor pattern)을 즐겨 사용했다. 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지..
클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 하지만 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. (클래스의 인스턴스를 반환하는 단순한 정적 메서드를 말하는게 맞다!) 다음 코드는 boolean 기본 타입의 박싱 클래스인 Boolean에서 발췌한 간단한 예다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 클래스는 클라이언트에 public 생성자 대신 정적 팩터리 메서드를 제공할 수 있다고 했다. (같이 제공할수도 있다) 이 방식에는 장점, 단점이 모두 존재한다. 먼저 장점 다섯 가지에 대해 알아본다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기..