소프트웨어를 설계할 때 클래스의 인스턴스 수를 정확히 1개로 제한해야 하는 경우가 있습니다. 바로 이때 싱글톤 패턴(Singleton pattern)이 사용됩니다. 싱글톤 패턴은 클래스의 인스턴스 수를 정확히 1개로 제한해야 하는 설계 상의 문제에 대한 해결책입니다. 즉, 전체 프로그램에서 특정 유형의 객체가 단 1개만 있어야 할 때 사용됩니다.

싱글톤 패턴의 사용

싱글톤 패턴은 프로그램 컨텍스트 내에서 해당 객체가 고유한 물리적 객체이거나, 혹은 배후에 물리적 실체가 없는 설계상의 전역 객체인 경우와 같은, 두 가지 범주의 디자인 문제를 해결하는 데 사용됩니다.

물리적 객체나 리소스를 나타내는 객체

싱글톤 패턴은 물리적 객체 또는 리소스를 나타내는 객체가 하나만 있어야 하는 상황에서 사용됩니다. 예를 들어 컴퓨터 시스템의 프린터 드라이버는 싱글톤으로 구현할 수 있습니다. 프린터 드라이버는 시스템 내에 프린터가 하나만 있을 수도 있기 때문에 프로그램 컨텍스트 내에서 고유한 객체입니다.

싱글톤 패턴은 언제 사용할까?
싱글톤 패턴은 언제 사용할까?

설계상 전역 객체

싱글톤 패턴은 리소스 관리자와 같이 배후에 물리적 실체가 없이 설계상 전역인 객체에도 사용됩니다. 이 때, 리소스 관리자는 메모리, 네트워크, 디스크 리소스와 같은 리소스를 관리하는 객체입니다. 리소스 관리자를 싱글톤으로 구현하면 프로그램에서 리소스 관리자의 인스턴스가 단 1개만 존재하도록 할 수 있습니다.

일반화 가능성과 편의성 사이의 절충점

싱글톤을 사용할지 여부를 결정하는 것은 일반화 가능성과 편의성 사이의 절충점입니다. 즉, 어떤 제한 사항이 발생할 가능성과 코드를 다시 설계해야 하는 어려움 등을 고려하여 판단하는 것입니다. 예를 들어, 프로그램에서 클래스의 여러 인스턴스로 인해 제한이 발생할 가능성이 있는 경우 클래스를 싱글톤으로 구현하는 것이 가장 좋습니다. 반면에 프로그램에 제한이 발생할 가능성이 낮고 코드 재설계 난이도가 높은 경우에는 싱글톤 패턴을 사용하지 않는 것이 가장 좋습니다.

정리

싱글톤 패턴은 클래스의 인스턴스 수를 정확히 1개로 제한하는 설계 문제에 대한 해결책입니다. 싱글톤 패턴은 물리적 객체 혹은 물리적 실체가 없이 설계상 전역 객체라는 두 가지 범주의 설계 문제를 해결하는 데 사용됩니다. 싱글톤을 사용하기로 결정하는 것은 일반화 가능성과 편의성 사이의 절충안이며, 이는 제한 사항이 발생할 가능성과 코드 재설계의 난이도를 기준으로 판단한 결정입니다.

참고로 소프트웨어 디자인 패턴 및 개체 지향 프로그래밍에 대해 좀 더 공부하고 싶다면 다음의 링크를 참고하시기 바랍니다.

개체 지향 프로그램 및 설계 방법

추천 학습 자료