공부 노트

싱글톤 패턴이란?

미로910 2024. 9. 25. 14:57

싱글톤(Singleton) 패턴

객체 지향 프로그래밍에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다. 이 패턴은 전역 변수를 사용하지 않고도, 애플리케이션 전반에서 동일한 객체를 공유해야 하는 상황에서 유용합니다.

 

1. 싱글톤 패턴의 개념

싱글톤 패턴의 핵심 개념은 클래스 인스턴스의 유일성을 보장하는 것입니다.

즉, 해당 클래스의 인스턴스가 단 하나만 생성되고, 어디에서나 동일한 인스턴스에 접근할 수 있도록 하는 것입니다. 이를 위해 특정 클래스를 설계할 때, 인스턴스를 생성하는 과정과 접근하는 방식을 제어합니다.

 

2. 사용 목적

싱글톤 패턴은 주로 다음과 같은 상황에서 사용됩니다.

  • 전역적 상태 관리: 애플리케이션의 전역적인 설정, 설정 값을 유지하는 객체에 사용됩니다.
  • 리소스 관리: 데이터베이스 연결 풀이나 파일 시스템 접근 같은 무거운 리소스를 공유할 때 유용합니다.
  • 로그 시스템: 로그 기록을 처리하는 클래스는 인스턴스가 여러 개일 필요 없이 하나만 있으면 충분합니다.

 

3. 싱글톤 패턴의 구현 방법

3.1. 기본적인 싱글톤 구현 (자바 예시)

이 예제에서 getInstance() 메서드는 인스턴스를 생성하거나 이미 존재하는 인스턴스를 반환합니다.

생성자를 private으로 선언했기 때문에 외부에서 직접 객체를 생성할 수 없습니다.

3.2. 스레드 안전한 싱글톤 구현

멀티스레드 환경에서는 여러 스레드가 동시에 getInstance() 메서드를 호출할 경우 두 개 이상의 인스턴스가 생성될 수 있습니다. 이를 방지하기 위해 '동기화'를 적용할 수 있습니다.

여기서 synchronized 키워드를 사용해 동기화된 메서드로 만들면 한 번에 하나의 스레드만 이 메서드에 접근할 수 있어, 여러 스레드가 동시에 접근할 때도 안전하게 유일한 인스턴스를 반환할 수 있습니다.

3.3. 이른 초기화 (Eager Initialization)

싱글톤 인스턴스를 애플리케이션 시작 시점에 바로 생성하는 방식입니다.

이 방법은 스레드 안전 문제를 해결하지만, 사용하지 않을 때에도 메모리를 차지할 수 있다는 단점이 있습니다.

 

4. 싱글톤 패턴의 장단점

4.1. 장점

  • 인스턴스의 유일성: 시스템 전반에 하나의 인스턴스만 존재함으로써 메모리 절약과 일관성 있는 상태 유지가 가능합니다.
  • 전역 접근 가능성: 언제든지 인스턴스에 접근할 수 있는 전역 접근 지점이 제공됩니다.
  • 리소스 관리: 데이터베이스 연결 등 리소스가 제한된 상황에서 효율적으로 리소스를 공유할 수 있습니다.

4.2. 단점

  • 테스트의 어려움: 싱글톤 패턴을 사용하면, 테스트에서 전역 상태를 공유하게 되므로, 객체의 상태가 테스트마다 초기화되지 않아 테스트를 복잡하게 만들 수 있습니다.
  • 멀티스레드 환경에서의 문제: 잘못된 구현 시 멀티스레드 환경에서 여러 인스턴스가 생성될 수 있습니다.
  • 의존성 감추기: 싱글톤을 남용할 경우, 클래스 간의 의존 관계가 명시적이지 않고, 코드의 유지보수가 어려워질 수 있습니다.

 

즉, 싱글톤 패턴은 간단하지만 매우 강력한 디자인 패턴으로, 특정 상황에서 유일한 인스턴스를 생성해야 할 때 효과적으로 사용할 수 있습니다. 그러나 남용하면 코드의 유지보수가 어려워질 수 있으므로, 적절한 상황에서 신중하게 사용하는 것이 중요합니다.

 

싱글톤 패턴을 사용하는 가장 큰 이유는 "유일성(단일성)을 보장하기 위해서이다.!!

'공부 노트' 카테고리의 다른 글

추상화와 다형성  (1) 2024.09.26
스레드란? (스레드/멀티스레드)  (4) 2024.09.25
Spring Boot - IoC란? (제어의 역전) // 싱글톤 패턴 (공부하기)  (0) 2024.08.13
session 이란  (0) 2024.07.15
PreparedStatement란  (1) 2024.07.08