[TIL] 정적 팩토리 메서드 - static Factory Method

최은창·2025년 11월 27일
post-thumbnail

00. 개요

  • 정적 펙토리 메서드는 객체 생성을 담당하는 static 메서드로, 생성자(constructor) 대신 인스턴스를 생성하고 반환하는 역할을 한다.
  • 즉, 일반적인 생성자(Constructor) 대신에 클래스의 인스턴스를 생성하고 초기화하는 로직을 캡슐화 하여 제공하는 정적(static) 메서드다.

01. 특징

  • 정적 메서드 : 클래스 레벨에서 호출되며, 인스턴스 생성 없이 접근할 수 있다.
  • 객체 반환 : 내부에서 생성한 객체(또는 이미 존재하는 객체)를 반환한다.
  • 생성자 대체: 생성자와 달리 메서드 이름을 명시할 수 있어, 생성 과정의 목적이나 특징을 명확하게 표현 할 수 있다.
  • 유연한 구현 : 객체 생성 과정에서 캐싱, 객체 재활용, 하위 타입 객체 반환 등 다양한 로직을 적용할 수 있다.

참고로 인자들을 받아 간단하게 객체를 생성할 때는 주로 of(...)라는 이름을 사용한다.

02. 예시

  1. 회원 등급별 생성자가 다른 경우
// 일반 회원 가입시 이름, 나이, 등급
new Member("회원1", 20, NORMAL);

// VIP 회원 가입시 이름, 나이, 등급, 선물 주소지
new Member("회원1", 20, VIP, "선물 주소지);
  • 예를 들어 VIP 회원의 경우 객체 생성 시 선물 주소지가 추가로 포함된다고 가정하자.
  • 이런 부분을 생성자만 사용해서 처리하기는 헷갈릴 수 있다.
// 일반 회원 가입시 인자 2개
Member.createNormal("회원1", 20);

// VIP 회원 가입시 인자 3개
Member.createVip("회원1", 20, "선물 주소지);
  • 정적 팩토리를 사용하면 메서드 이름으로 명확하게 회원과 각 회원에 따른 인자를 구분할 수 있다.
  • 추가로 객체를 생성하기 위해 전에 이미 있는 객체를 찾아서 반환하는 것도 가능하다.
    • Integer.valueOf() : -128 ~ 127 범위는 내부에 가지고 있는 Integer 객체를 반환한다.

참고 : 정적 팩토리 메서드를 사용하면 생성자에 이름을 부여할 수 있기 때문에 보통 가독성이 더 좋아진다. 하지만 반대로 이야기하면 이름도 부여해야 하고, 준비해야 하는 코드도 더 많다. 객체의 생성이 단순한 경우에는 생성자를 직접 사용하는 것이 단순함의 관점에서 보면 더 나은 선택일 수 있다.

profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글