JAVA Design Pattern, Singleton Pattern 싱글톤 패턴
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;
}
}
위와 같이 작성을하면, 해당 클래스가 처음 호출될 때 한 번만 객체가 생성되고,
그 이후부터는 생성된 객체를 반환해서 사용할 수 있도록 구성이 되어있다.
클래스를 위와 같이 구성하면 공유자원의 대한 효율성을 확보할 수 있고,
추가적으로 메모리의 낭비 또한 최적화 할 수 있다.
끝!
개인적으로 이해한 내용을 바탕으로 한 글이므로 잘못된 부분이 있다면 다양한 의견 부탁드립니다.