[Java] 정적 팩토리 메서드를 사용하자

김의진·2021년 12월 28일
0

Effective java 3/E의 item 1의 내용을 참고하여 정리하였습니다.

그동안 객체를 생성할때 초기에는 new 연산자를 사용하였고, 그 이후에는 setter를, 그리고 이후에는 빌더패턴을 사용했었다. Effective Java를 읽으며 상황에 따라 적합한 객체 생성 방식을 정하여 사용해야 함을 알게되었고 그 방법중 하나가 '정적 팩토리 메서드' 방식이다.

정적 팩토리 메서드(Static Factory Method)란?

  • 정적 팩토리 메서드이 팩토리는 디자인 패턴에서 등장하는 팩토리 패턴의 취지를 담고 있지만 완전히 같지는 않다. (객체의 생성 역할을 분리하는 디자인 패턴)
  • 정적 팩토리 메서드는 객체 생성을 클래스의 생성자에 직접 접근하지 않고 해당 클래스에 static으로 선언된 별도의 메서드(객체생성을 담당하는)를 통해서 객체를 생성하도록 하는 것을 의미한다.

생성자와 다른점은?

생성자를 통해서 객체를 생성해도 불편한 점이 없는데, 왜 정적 팩토리 메서드라는 것을 통해서 객체를 생성해야 할가?
정적 팩토리 메서드를 이용함으로써 얻게되는 장점들을 하나하나 살펴보도록 하겠다.

1. 이름을 가질 수 있다.

new 키워드를 이용하여 객체를 생성하게 되면 해당 생성자 혹은 내부 구조를 명확하게 이해하고 있을때 목적에 맞게 객체를 생성할 수 있다. 하지만 정적 팩토리 메서드는 해당 메서드의 이름만으로 해당 객체가 왜 생성되는지, 어떻게 생성되는지를 파악할 수 있는 장점이 있다.
예를 들어 아래의 코드를 보자

Fruit fruit = new Fruit(apple);	// 생성자 

Fruit fruit = Fruit.createApple(); // 정적 팩토리 메서드

위의 코드를 보면 한눈에 봐도 아래에 작성된 정적 팩토리 메서드 패턴이 어떤 목적의 객체를 생성하는지 확실히 알 수 있다.

2. 하위 자료형 객체를 반환할 수 있다.

상속구조의 클래스에서 자식 클래스를 객체화 할때 정적 팩토리 메서드는 유용하게 사용될 수 있다. 이는 정적 팩토리 메서드가 생성자의 역할을 함과 동시에 반환의 기능을 함께 가지고 있기 때문이다.

3. 객체 생성을 캡슐화 할 수 있다.

정적 팩토리 메서드 네이밍

  • from - 하나의 매개 변수
  • of - 여러개의 매개 변수
  • getInstance || instance - 인스턴스를 생성, 이전것과 같을 수 있음
  • newInstance || create - 새로운 인스턴스 생성
profile
3년차 Spring, Java 주니어 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보