싱글톤 디자인패턴이란 생성된 하나의 인스턴스를 계속해서 사용하게 하고 새로운 인스턴스 생성을 방지하는 디자인패턴입니다.

즉, 싱글톤디자인패턴은 어플리케이션이 시작될 때 최초 한번만 메모리를 할당하고, 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴입니다.

따라서 생성자가 여러차례 호출되더라도 실제로는 최초 생성한 객체를 반환하는 것이죠. 자바에서는 흔히 생성자를 private로 설정하고, getInstance()로 받아쓰기도 합니다.

장점

고정된 메모리영역을 얻으면서 한번의 new 키워드로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있습니다. 또한, 싱글톤으로 생성된 인스턴스는 전역인스턴스로 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다는 장점이있습니다.

일반적으로 Data Base Connection Pool처럼 공통된 객체를 여러개 생성하여 사용하는 경우 많이 사용됩니다.

단점

싱글톤 인스턴스가 너무많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아지게 됩니다. 즉, 개방-폐쇄 원칙을 위배하게 되는것이죠(객체지향 설계원칙).

따라서 수정이 어려워지고 테스트하기 어려워집니다.

이외에도 멀티쓰레드 환경에서 동기화 처리를 하지 않으면 인스턴스가 여러개 발생할 수도 있습니다.