728x90
반응형
싱글톤 패턴(Singleton Pattern)

 

https://refactoring.guru/design-patterns/singleton

싱글톤 패턴은 객체 생성을 제한하여 전역에서 접근 가능한 하나의 인스턴스만을 사용하는 디자인 패턴입니다.

 

즉, 애플리케이션 내에서 오직 한 개의 인스턴스만 생성하고

이를 다른 객체들이 공유하여 사용할 수 있도록 하는 패턴입니다.

 

싱글톤 패턴은 객체의 생성과 파괴에 드는 비용을 줄일 수 있으며,

하나의 인스턴스를 공유함으로서 일관된 상태를 유지할 수 있습니다.

또한 전역으로 접근 가능한 유일한 인스턴스를 사용하므로

전체 시스템에서의 데이터 공유와 통합을 용이하게 할 수 있습니다.

 

싱글톤 패턴은 대개 클래스의 인스턴스를 단 한 번만 생성하고,

해당 인스턴스를 참조할 수 있는 정적 메서드를 제공합니다.

이를 통해 싱글톤 클래스의 인스턴스는 어디서든지 접근할 수 있고,

전역으로 공유되는 유일한 인스턴스를 제공할 수 있습니다.

 

아래는 Java로 구현한 간단한 싱글톤 패턴 예제입니다.

public class Singleton {
    // 인스턴스를 저장하기 위한 정적 변수
    private static Singleton instance;
    
    // 생성자를 private으로 선언하여 외부에서 객체 생성 불가능하도록 함
    private Singleton() {}
    
    // 정적 메서드를 통해 인스턴스를 생성하고 반환
    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

 

위 예제에서는 Singleton 클래스가 싱글톤으로 구현되어 있습니다.

Singleton 클래스의 생성자는 private로 선언되어 있으므로, 외부에서 직접적으로 객체를 생성할 수 없습니다.

대신, getInstance() 메서드를 통해 Singleton 객체를 생성합니다.

이 메서드에서는 Singleton 객체의 인스턴스가 아직 생성되지 않았을 경우에만 새로운 Singletone 객체를 생성합니다.

만약 이미 생성된 인스턴스가 있을 경우에는 그것을 반환합니다.

이를 통해 항상 하나의 인스턴스만을 사용하도록 보장 할 수 있습니다.


e.g.

class Connection{
	private static Connection _inst = null;
	private int count = 0;
	static public Connection get() {
		if(_inst == null) {
			_inst = new Connection();
			return _inst;
		}return _inst;
	}
	public void count() {
		count ++;}
	public int getCount() {
		return count;
	}
}

public class TestClass{
	public static void main(String[] args) {
		Connection conn1 = Connection.get();
		conn1.count();
		Connection conn2 = Connection.get();
		conn2.count();
		Connection conn3 = Connection.get();
		conn3. count();
		
		System.out.print(conn1.getCount());	// 3
	}
}

 

위 코드는 싱글톤 패턴을 사용하여 Connection 객체를 생성하고 해당 객체의 count 값을 증가시키는 예제입니다.

 

위 코드에서는 Connection 클래스가 싱글톤으로 구현되어 있습니다.

Connection 클래스의 생성자는 private로 선언되어 있으므로, 외부에서 직접적으로 객체를 생성할 수 없습니다.

대신, static 으로 선언된 get() 메서드를 통해 Connection 객체를 생성합니다.

이 메서드에서는 Connection 객체의 인스턴스가 아직 생성되지 않았을 경우에만 새로운 Connection 객체를 생성합니다.

만약 이미 생성된 인스턴스가 있을 경우에는 그것을 반환합니다.

 

main() 함수에서는 get() 메서드를 통해 Connection 객체를 생성하고,

이 객체의 count 값을 증가 시킵니다.

마지막으로 conn1 객체의 getCount() 메서드를 호출하여 count 값을 출력합니다.

이때 출력되는 값은 3입니다.

이는 conn1, conn2, conn3 객체 모두가 같은 Connection 인스턴스를 참조하고 있기 때문입니다.

728x90
반응형

'Language > Java' 카테고리의 다른 글

Observer Pattern  (0) 2023.04.14
Factory Method Pattern  (0) 2023.04.14
Java - super, super()  (0) 2023.04.13
Java - Code Sample  (0) 2023.04.13
Java - Exception  (0) 2023.03.27

+ Recent posts