[개발]/Spring WEB

JAVA Design Pattern, Singleton Pattern 싱글톤 패턴

John-Co 2022. 10. 12. 10:38

JAVA + Spring boot

Spring Framework 를 공부하면서, S/W 디자인 패턴의 대한 내용을 적어보려고한다.

1995년에 GoF(Gang of Four) Design Pattern 이라는게 만들어졌고, 많은 사람들이 이 패턴을 활용하고 있다고 한다.

GoF Pattern 은 총 23개의 패턴으로 구성되어 있는데, 그 중에 가장 많이쓰는 패턴 몇가지에 대한 정리 내용이다.

 

오늘은 SingleTon 패턴에 대한 내용이다.

SIngleTon 패턴이란 무엇인가?

쉽게 이야기하면 프로그램 실행 후, 해당 클래스의 객체는 딱 1번만 생성되어 메모리에 할당되도록 만드는 디자인패턴이다.

한정적인 자원, 즉 딱 1개의 유한한 자원을 모두가 공유해서 사용하도록 할 때 필요한 패턴이다.

 

싱글톤 패턴이 필요한 이유!

예를 들면, 프로그램 내에서 Socket 통신 또는 Serial 통신 을 하고자할 때, 동일한 포트를 여러개 생성할 수 없다.

이때 특정 포트의 대한 자원을 싱글톤 패턴으로 작성하여, 여러 곳에서 공유해서 사용할 수 있도록 할 수 있다.

 

한 가지 더 예시를 들자면, 우리의 실제 생활에서 생각해보면 사무실 내에 프린터를 생각해보자.

보통 사무실에는 프린터가 1대 존재하고, 그 실체는 1개다.

1개의 자원을 모두가 공유해서 사용해야하는데, 이때! 싱글톤(SingleTon) 패턴으로 작성하면 된다.

 

그렇다면 싱글톤(SingleTon) 패턴은 어떻게 작성이될까?

Example

공유자원에 대한 Static Class 작성

"getInstance()" 함수를 보면, 첫 호출 시 단 한 번만 객체가 생성되며,

또한 여러 곳에서 해당 클래스의 객체를 생성할 수 없도록, 생성자를 "private" 접근자로 제한한다.

public static class SocketEx {
    private static SocketEx socketEx = null;
    
    // Single Ton 패턴 설계를 위해, 생성자를 막는다.
    private SocketEx(){
    }
    
    public static SocketEx getInstance(){
        if(socketEx == null){
            socketEx = new SocketEx();
        }
        
        return socketEx;
    }
}

위와 같이 작성을하면, 해당 클래스가 처음 호출될 때 한 번만 객체가 생성되고,

그 이후부터는 생성된 객체를 반환해서 사용할 수 있도록 구성이 되어있다.

 

클래스를 위와 같이 구성하면 공유자원의 대한 효율성을 확보할 수 있고,

추가적으로 메모리의 낭비 또한 최적화 할 수 있다.

 

끝!

 

개인적으로 이해한 내용을 바탕으로 한 글이므로 잘못된 부분이 있다면 다양한 의견 부탁드립니다.

반응형