본문 바로가기

잡다한 개발잡담

디자인 패턴 - 싱글톤 패턴(Singleton Pattern) - 1

싱글톤 패턴이란?
최소 1개에서 최대 N개로 객체 생성을 제한하는 패턴

왜 사용하는가?
무분별한 객체 생성은 컴퓨터의 자원을 낭비하게 되고, 프로그램의 전체 효율이 낮아지는 결과가 초래된다.
그러므로 개발자는 객체의 최대 개수를 제한할 필요성을 느끼게 되었다.

주의할 점
객체의 생성을 요청하는 쪽에서 생성되는 객체의 최대 개수를 제한하는 일에 신경 쓰지 않도록 구현해야 한다.

사용 예

위의 예제 코드를 보면 생성자를 private으로 선언하여 new를 통한 객체 생성이 불가능하고, getInstance 메서드를 통해서만 해당 인스턴스를 얻을 수 있기 때문에 싱글톤 패턴이라고 할 수 있다.

만약 생성자를 public으로 변경하게 된다면 생성자를 통한 객체 생성이 가능하기 때문에 private으로 꼭 변경해주어야 한다.

그리고 getInstance 매서드에서 인스턴스를 생성하는 방식으로 코드를 작성해도 되는데 아래와 같이 코드를 작성하면 된다.

 

싱글톤 패턴의 장점
싱글톤 패턴은 매우 편리해보인다. 단 한 번의 new 연산자를 통한 인스턴스 생성으로 메모리를 낭비를 방지할 수 있는 장점을 가지고 있고, 전역성을 가지고 있기 때문에 데이터를 공유하는 것도 매우 간단하다. 또한 두 번 이용할 때부터는 새로 생성할 필요가 없으므로 속도도 빠를 것이다.(스프링을 예로 들자면 처음 애플리케이션을 구동할 때 싱글톤으로 빈을 생성하기 때문에 느리지만 이것은 큰 문제가 될 수 없다고 생각한다.)

싱글톤 패턴의 한계
싱글톤 인스턴스가 많은 기능을 하고, 많은 데이터 공유를 하게 될 경우 클래스 간의 결합도가 높아져 "개방-폐쇄 원칙"을 위배하여 객체 지향 설계 원칙에 어긋나게 된다. 수정도 어렵고, 테스트도 어렵다. 그리고 쓰레드 사용 시에 문제가 발생할 수 있다는 점이다. 동기화 처리를 하지 않게 된다면? 두 개의 객체가 생성될 수도 있다.