AiPE

객체지향에서의 싱글톤 패턴(Singleton Pattern) 본문

[XiBBaL] Study/Java

객체지향에서의 싱글톤 패턴(Singleton Pattern)

Oshimaker XiBBaL 2024. 4. 3. 16:28
반응형

싱글톤 패턴(Singleton Pattern)은 디자인(쉽게, 프로그램 설계라고 보면 된다) 패턴 중 하나로, 

어떤 클래스가 최대 한 번의 인스턴스만을 갖도록 보장하는 패턴이다.

 

이는 클래스의 인스턴스를 하나만 생성하여 전역적으로 접근할 수 있도록 하는 것을 목적으로 한다.

 

"전역적인 접근"은 무엇을 의미하는가?
전역 상태를 유지한다는 것은 프로그램의 어느 곳에서나 접근 가능한 상태를 말한다.

전역 상태를 유지하면 객체 간의 데이터 공유가 용이해지고, 설정값이나 상태 정보의 일관성을 유지할 수 있으므로
여러 곳에서 공유된 데이터나 설정값을 저장할 때 유용하다.

싱글톤 패턴을 사용하면 클래스의 인스턴스가 하나만 존재하므로, 해당 인스턴스의 상태는 어디서든 접근할 수 있게 된다.

 

 

 

싱글톤 패턴을 구현하는 방법은 보통 다음과 같다.

 

① 생성자를 private으로 선언

클래스의 생성자를 외부에서 접근할 수 없도록 private으로 선언한다.
이렇게 하면 외부에서 직접적으로 객체를 생성하는 것을 막을 수 있다.

"아니 전역적인 접근 가능 상태를 유지한다면서 외부에서 접근하는 것을 막는다고?"라고 생각할 수 있겠지만
생성자를 private로 선언하는 것은 외부에서 클래스의 내용에 대해 접근하는 것을 막는다는 것이다.
해당 클래스에 인스턴스 출력을 요구하는 것은 여전히 할 수 있다.

즉, 외부에서는 싱글톤 패턴으로 선언한 클래스로 만들어진 결과(인스턴스)만을 받아 볼 수 있는 것이지,
그 결과(인스턴스)의 생성 과정에 관여할 수 없다.



② 인스턴스를 저장할 정적 변수 선언

클래스 내부에 정적(static) 변수를 선언한다. 이는 유일한 인스턴스를 저장하는 역할을 한다.



③ 인스턴스를 반환하는 정적 메서드 구현

유일한 인스턴스를 반환하는 정적(static) 메서드를 구현한다.
이 메서드는 클래스의 정적 변수에 접근하여 인스턴스를 생성하거나 반환하게 된다.

이때, 인스턴스가 이미 생성되었다면 새로운 인스턴스를 생성하지 않고 기존의 인스턴스를 반환하므로,
싱글톤 패턴의 클래스는 유일한, 일관된, 동일한 인스턴스만을 반환할 수 있게 된다.

 

 

 

 

아래는 Java로 싱글톤 패턴을 구현하는 예시이다. 

ChatGPT에게 부탁해 가져왔다.

public class Singleton {
    // 정적 변수로 유일한 인스턴스를 저장
    private static Singleton instance;

    // private 생성자로 외부에서 인스턴스 생성 방지
    private Singleton() {
    }

    // 유일한 인스턴스를 반환하는 정적 메서드
    public static Singleton getInstance() {
        // 인스턴스가 없을 때만 생성
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

 

 

반응형