[Pattern] Multiton Pattern이란?

이승우·2023년 5월 31일
1
post-custom-banner

최근 면접에서 Multiton 패턴이라는 것에 대해 질문을 받았는데, 처음 들어보는 개념이라 간략하게 정리하려고 한다.

Multiton Pattern이란?

Multiton Pattern은 객체를 생성하는 패턴 중 하나로, Singleton Pattern의 확장된 형태이다. Singleton Pattern은 클래스의 인스턴스를 하나만 생성하여 전역적인 접근을 제공하는 것이다. 반면, Multiton Pattern은 클래스의 인스턴스를 여러 개 생성하여 각 인스턴스에 고유한 이름을 부여하는 방식이다.

일종의 key-value 와 같은 Map 형태로 이해할 수 있다. 각 객체 인스턴스는 특정한 key(이름)에 대응되며, 해당 key(이름)를 사용하여 인스턴스를 생성하거나 가져올 수 있다. 이렇게 생성된 객체 인스턴스들은 고유한 이름을 가지고 독립적으로 동작할 수 있다.

Multiton Pattern은 다중 스레드 환경에서 여러 개의 인스턴스가 동시에 생성되는 경우에도 안전하게 작동할 수 있다. 각 인스턴스는 고유한 이름을 가지므로 스레드 간의 충돌이나 Race Condition을 방지할 수 있다.

import java.util.HashMap;
import java.util.Map;

public class Multiton {
    private static Map<String, Multiton> instances = new HashMap<>();

    private Multiton() {
        // private 생성자
    }

    public static synchronized Multiton getInstance(String name) {
        Multiton instance = instances.get(name);
        if (instance == null) {
            instance = new Multiton();
            instances.put(name, instance);
        }
        return instance;
    }
}

Singleton과 달리 private 생성자를 가지고 있으며, getInstance() 메소드를 통해 인스턴스를 생성하거나 가져온다. 이때, getInstance() 메소드는 이미 생성된 인스턴스가 있다면 해당 인스턴스를 반환하고, 없다면 새로운 인스턴스를 생성하여 map에 추가한다.

[사용 예시]

Multiton instance1 = Multiton.getInstance("Instance 1");
Multiton instance2 = Multiton.getInstance("Instance 2");

// instance1과 instance2는 서로 다른 인스턴스입니다.
profile
Android Developer
post-custom-banner

0개의 댓글