[TIL] 싱글톤 패턴(Singleton Pattern)

Eden·2024년 12월 23일
1

TIL

목록 보기
75/92
post-thumbnail

싱글톤 패턴은 객체의 인스턴스를 단 하나만 생성하여, 어디서든 접근할 수 있도록 공유된 인스턴스를 제공하는 디자인 패턴이다. 앱 전체에서 공통적으로 사용하는 리소스를 관리하거나 상태를 공유할 때 유용하게 사용된다.

싱글톤의 주요 특징

단일 인스턴스

클래스의 인스턴스를 단 하나만 생성함.

글로벌 접근

프로그램 어디서든 해당 인트턴스에 접근할 수 있다.

Lazy Initialization

인스턴스는 필요할 때 초기화되며, 초기화는 한 번만 이루어진다.

싱글톤이 필요한 경우

공유리소스 관리

네트워크 매니저, 데이터베이스 연결 객체, 파일 시스템 접근 관리 등

전역 상태 관리

사용자 세션, 앱의 설정 값, 캐시 데이터 관리 등

성능 개선

동일 데이터를 여러 번 로드하거나 객체를 반복 생성하는 대신 단일 객체로 공유

Swift에서의 싱글톤 구현

기본적인 구현 방법

class Singleton {
    static let shared = Singleton()

    private init() {
        // 초기화 코드
    }
}
  • static let shared: 전역으로 접근 가능한 공유 인스턴스
  • private init(): 외부에서 직접 인스턴스를 생성하지 못하도록 생성자를 private로 선언

추가 설정이 필요한 경우

class Singleton {
    static let shared: Singleton = {
        let instance = Singleton()
        // 추가 설정
        return instance
    }()

    private init() {
        // 초기화 코드
    }
}
  • 클로저를 사용해 공유 인스턴스를 생성할 때 초기화 작업과 추가 설정 가능

싱글톤의 스레드 안전성(Thread Safety)

Swift의 static let스레드 안전을 기본적으로 보장한다. 그래서 싱글톤이 여러 스레드에서 동시에 접근되어도 문제가 없다.

사용 예시) 네트워크 매니저

class NetworkManager {
    static let shared = NetworkManager()

    private init() {}

    func fetchData(from url: String) {
        // 네트워크 요청 처리
    }
}

// 사용
NetworkManager.shared.fetchData(from: "https://example.com")

싱글톤 사용 시 주의점

글로벌 상태 관리 남용

싱글톤을 과도하게 사용하면 코드가 복잡해지고 테스트가 어려워질 수 있다. 필요 이상으로 전역 상태를 공유하지 않도록 주의해야 한다.

의존성 주입 고려

싱글톤의 글로벌 접근성은 편리하지만, 의존성을 명확히 하기 위해 일부 경우에는 싱글톤 대신 의존성 주입(Dependency Injection)을 사용하는 것이 더 나을 수도 있다.

결론

싱글톤은 애플리케이션 전체에서 공통적으로 사용하는 리소스를 관리하기 위한 강력한 도구다. Swift에서는 static let을 사용해 간단하고 스레드 안전하게 구현할 수 있다. 다만, 과도한 사용은 피하고 필요할 때 적절히 활용하는 것이 중요하다.

profile
Frontend🌐 and iOS

0개의 댓글