Skip to content

싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요? #66

@ujhong7

Description

@ujhong7

싱글톤 패턴(Singleton Pattern)이란?


1. 개념

  • 싱글톤 패턴은 특정 클래스의 인스턴스를 오직 하나만 생성하도록 제한하고, 어디서든 이 인스턴스에 접근할 수 있도록 하는 디자인 패턴입니다.
  • 애플리케이션 전역에서 공통된 리소스나 데이터를 관리할 때 사용됩니다.

2. 특징

  • 인스턴스가 단 하나만 존재하므로 메모리 낭비를 방지합니다.
  • 전역 상태를 관리하므로 데이터 일관성을 유지할 수 있습니다.
  • *생성자(private)**를 숨기고, 클래스 내부에서 인스턴스를 생성하여 관리합니다.

3. 사용 예시

  • iOS에서 사용되는 싱글톤 패턴:
    1. UserDefaults:
      • 앱 전역에서 사용자 기본 설정 데이터를 관리.
    2. URLSession:
      • 네트워크 요청을 위한 공통 인스턴스 관리.
    3. NotificationCenter:
      • 앱 전역 이벤트를 관리하고 알림을 보내기 위한 공통 객체.
    4. CoreData의 persistentContainer:
      • 데이터베이스 관리 인스턴스.

4. iOS에서 싱글톤 구현 방법

final class SingletonExample {
    // 1. 싱글톤 인스턴스
    static let shared = SingletonExample()

    // 2. private 생성자: 외부에서 새로운 인스턴스 생성 방지
    private init() {}

    // 3. 예시 메서드
    func doSomething() {
        print("Singleton is working!")
    }
}

// 싱글톤 사용 예시
SingletonExample.shared.doSomething()

5. 장점

  1. 메모리 절약:
    • 하나의 인스턴스를 공유하므로 불필요한 객체 생성을 방지합니다.
  2. 전역 접근성:
    • 동일한 인스턴스를 어디서든 호출하여 사용할 수 있습니다.
  3. 데이터 일관성:
    • 인스턴스가 하나뿐이므로 상태 변경을 쉽게 관리할 수 있습니다.

6. 단점

  1. 테스트 어려움:
    • 전역 상태로 인해 유닛 테스트나 의존성 주입(DI)이 어려울 수 있습니다.
  2. 의존성 증가:
    • 클래스 간 결합도가 높아질 가능성이 있습니다.
  3. 멀티쓰레드 환경:
    • 동시 접근 시 데이터 무결성을 보장하려면 추가적인 처리가 필요합니다.

7. 사용 사례

  • 애플리케이션 전체에서 하나의 인스턴스만 필요할 때:
    • 설정 관리 (UserDefaults)
    • 네트워크 관리 (URLSession)
    • 로그 관리 (Logging Service)
    • 데이터베이스 연결 관리

8. 싱글톤 패턴 주의사항

  • 지나친 사용 금지:
    • 너무 많은 싱글톤은 코드 가독성과 유지보수성을 떨어뜨립니다.
  • 의존성 주입(DI)과의 조화:
    • 싱글톤은 DI와 충돌할 수 있으므로 필요에 따라 적절히 병행 사용합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions