더북(TheBook)

2.4.5 팩토리 메서드


정적 메서드는 흔히 팩토리 메서드를 만드는 데 사용한다. 팩토리 메서드(factory method)는 클래스의 새 인스턴스를 반환하는 정적 메서드를 의미한다. 예를 들어 NumberFormat 클래스에는 다양한 스타일에 대응해서 포매터 객체를 돌려주는 팩토리 메서드가 있다.

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

NumberFormat percentFormatter = NumberFormat.getPercentInstance();

double x = 0.1;

System.out.println(currencyFormatter.format(x)); // $0.10를 출력한다.

System.out.println(percentFormatter.format(x)); // 10%를 출력한다.


왜 생성자 대신 팩토리 메서드를 사용했을까? 생성자를 구별하는 유일한 방법은 생성자의 매개변수 타입이다. 따라서 매개변수가 없는 생성자를 두 개씩 둘 수 없다.

더구나 new NumberFormat(...) 생성자는 NumberFormat을 돌려준다. 하지만 팩토리 메서드는 서브클래스의 객체를 반환할 수 있다. 실제로 이 팩토리 메서드들은 DecimalFormat 클래스의 인스턴스를 반환한다(서브클래스는 4장 상속과 리플렉션에서 자세히 설명한다).

팩토리 메서드를 사용하면 불필요하게 새 객체를 생성하는 대신 공유 객체를 반환할 수도 있다. 예를 들어 Collections.emptyList()를 호출하면 변경할 수 없는 빈 리스트(공유 객체)를 반환한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.