Java

Java | 정적 팩토리 메서드(Static Factory Method)

이진유진 2024. 3. 4. 13:51
반응형

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

클래스의 인스턴스를 생성하고 반환하는 정적 메서드 입니다. 

주로 생성자 대신 사용되며, 객체 생성 로직을 숨기고 객체 생성을 유연하게 다룰 수 있게 합니다. 

이러한 정적 팩토리 메서드는 해당 클래스의 이름을 갖지 않아도 되며, 

호출할 때마다 새로운 객체를 생성할 필요가 없을 때 특히 유용합니다. 

 

메서드 생성

public class MyClass {
    // 생성자 대신 사용되는 정적 팩터리 메서드
    public static MyClass createInstance() {
        // 객체 생성 로직
        return new MyClass();
    }
}

 

위의 생성된 메서드를 활용하여 객체 생성 

MyClass instance = MyClass.createInstance();

 

정적 팩토리 메서드의 장점

  1. 이름을 지정할 수 있습니다. 
    • 생성자의 경우 클래스명과 동일하지만, 정적 팩토리 메서드는 메소드명을 원하는 대로 지을 수 있습니다. 이를 통해 객체 생성의 의도를 더 명확하게 전달할 수 있습니다. 
  2. 재사용 가능한 인스턴스 반환 
    • 정적 팩토리 메서드는 호출할 때마다 새로운 객체를 생성하지 않아도 되므로, 특정 조건에 따라 미리 생성한 객체를 반환할 수 있습니다.
public class MyClass {
    private static final MyClass DEFAULT_INSTANCE = new MyClass();

    public static MyClass createInstance() {
        // 특별한 조건일 때 기존 객체를 반환
        if (/* some condition */) {
            return DEFAULT_INSTANCE;
        } else {
            return new MyClass();
        }
    }
}

 

3. 자식 클래스 반환 가능 

  • 정적 팩토리 메서드는 해당 클래스의 하위 클래스를 반환할 수 있어, 인터페이스를 통한 구현 객체를 제공할 때 유연성을 제공합니다. 
public interface MyInterface {
    // 정적 팩터리 메서드
    static MyInterface createInstance() {
        return new MyInterfaceImpl();
    }
}

public class MyInterfaceImpl implements MyInterface {
    // 구현 내용
}

 

4. 미리 정의된 인스턴스 반환

  • 미리 정의된 상태의 객체를 반환할 수 있어, 불변 객체 패턴(immutability)과 함께 사용될 때 특히 효과적입니다. 
public class MyImmutableClass {
    private static final MyImmutableClass DEFAULT_INSTANCE = new MyImmutableClass(0, "default");

    private final int value;
    private final String name;

    private MyImmutableClass(int value, String name) {
        this.value = value;
        this.name = name;
    }

    public static MyImmutableClass createDefaultInstance() {
        return DEFAULT_INSTANCE;
    }
}

 

 

이러한 장점들은 정적 패토리 메서드를 효과적으로 사용할 수 있는 경우를 고려할 때 나타납니다. 

따라서 언제나 생성자 대신 정적 팩토리 메서드를 사용해야하는 것은 아니며, 상황에 맞게 선택하여 사용해야합니다. 

반응형