생성자 vs 정적 팩토리 메서드
🙊

생성자 vs 정적 팩토리 메서드

Created
Apr 26, 2024 06:28 AM
Last edited time
Last updated April 26, 2024
Tags
CS
Language
Language
Java
URL

Intro::

객체를 생성하는 두 가지 주요 방법인 생성자와 정적 팩토리 메서드 방식의 차이와 장단점에 대해 알아봅시다.
 

생성자

💡
생성자는 클래스의 인스턴스를 초기화하는 특별한 메서드입니다. 모든 클래스에는 하나 이상의 생성자가 있으며, 명시적으로 정의하지 않으면 컴파일러가 기본 생성자를 제공합니다.
 

장점

  1. 단순하고 직관적: 새 객체를 생성하는 가장 기본적인 방법입니다.
  1. 상속이 용이: 생성자를 가진 클래스는 다른 클래스에서 확장하기 쉽습니다.
  1. 객체 생성 과정이 명확함: 생성자는 객체 생성을 위해 항상 new 키워드와 함께 사용됩니다.

단점

  1. 동일한 시그니처의 생성자 오버로딩 제한: 생성자는 매개변수의 타입과 숫자에 의해서만 구별될 수 있습니다. 같은 타입의 매개변수를 여러 개 받는 생성자를 여러 개 만들 수 없습니다.
  1. 객체 생성 시 매번 새 객체 생성: 생성자는 호출될 때마다 새로운 인스턴스를 만들기 때문에, 불필요하게 자원을 소모할 수 있습니다.
 

정적 팩토리 메서드란?

💡
정적 팩토리 메서드는 클래스 내에 정의된 static 메서드를 통해 객체 인스턴스를 반환합니다. 이 메서드는 생성자와 다르게 이름을 가질 수 있어 사용자에게 반환되는 객체의 특성을 더 명확하게 전달할 수 있습니다.

장점

  1. 이름을 가짐: 정적 팩토리 메서드는 메서드 이름을 통해 반환되는 객체의 특성을 설명할 수 있어, 코드의 가독성과 명확성이 향상됩니다.
  1. 호출될 때마다 객체를 생성하지 않아도 됨: 필요에 따라 불변 객체(immutable objects)를 캐싱하고 재사용할 수 있어 메모리 사용과 생성 비용을 절약할 수 있습니다.
  1. 하위 타입 객체 반환 가능: 반환되는 객체의 클래스를 자유롭게 선택할 수 있어, 유연성이 증가합니다. 인터페이스 기반의 메서드를 제공할 수 있어 API를 더 유연하게 만들 수 있습니다.
  1. 파라미터에 따라 다른 클래스의 객체를 반환할 수 있음: 입력 파라미터에 따라 다양한 클래스의 인스턴스를 반환할 수 있어, 사용자는 구현 클래스를 몰라도 됩니다.

단점

  1. 상속을 할 때 제한: 클래스가 자신의 인스턴스를 생성하는 정적 메서드를 포함하고 있으면, 하위 클래스에서 이 메서드를 오버라이드할 수 없습니다.
  1. 다른 정적 메서드와 구분이 어려움: API 문서만 보고는 생성자와 정적 팩토리 메서드를 쉽게 구분할 수 없을 때가 있습니다.
  1. 정적 팩토리 메서드만 제공하는 클래스는 상속을 받을 수 없음: 이런 클래스를 확장하는 것이 불가능합니다.
 

코드 예시

public class Boolean { private final boolean value; private static final Boolean TRUE = new Boolean(true); private static final Boolean FALSE = new Boolean(false); private Boolean(boolean value) { this.value = value; } public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); } }
위 예제에서 Boolean 클래스는 TRUEFALSE라는 두 개의 정적 상수를 가지고, valueOf라는 정적 팩토리 메서드를 통해 필요한 인스턴스를 반환합니다. 이 방법으로 new를 사용하지 않고도 필요한 Boolean 객체를 얻을 수 있으며, 메모리 사용을 최적화할 수 있습니다.
 

References::

Loading Comments...