본문 바로가기
Architecture

[Swift] 싱글톤(Singleton)패턴과 예제

by 최지철 2024. 7. 23.
728x90
반응형

Singleton Pattern이란?

 

싱글톤 패턴이란,

 

특정 클래스의 인스턴스가 하나만 생성되도록 보장하고, 이에 대한 전역적인 접근점을 제공하는 디자인 패턴

 

전역 접근

싱글톤패턴은 전역적인 접근이 가능하다는 특징과 동시에 단점이 될 수 있다.

전역 접근은 어플리케이션 전체에서 단 하나의 인스턴스에 접근할 수 있어, 여러 곳에서 동일한 객체를 필요로 할 때 유용하지만, 그만큼 유의해야할 점도 있다.

 

How 어떻게 쓰는가?

static과 private init

class Singleton {
    static let shared = Singleton()
    
    private init() { 
        // 초기화 코드
    }
}

 

static 키워드는 클래스의 인스턴스를 전역적으로 접근할 수 있도록 하기 위해 사용된다

  • 단일 인스턴스 보장: static 키워드로 선언된 변수는 클래스 레벨에서 하나의 인스턴스로 공유된다. 즉, 클래스의 모든 인스턴스가 동일한 static 변수를 공유한다.
  • 전역 접근: static 키워드로 선언된 변수는 클래스 이름을 통해 어디서든 접근할 수 있다.

private init은 클래스 외부에서 인스턴스를 생성하지 못하도록 막기 위해 사용된다.

  • 인스턴스 생성 제한: private 접근 제어자를 사용하여 생성자를 제한하면, 클래스 외부에서는 더 이상 이 클래스를 직접 초기화할 수 없다. 오직 클래스 내부에서만 인스턴스를 생성할 수 있다.
  • 싱글톤 보장: 외부에서 인스턴스를 생성할 수 없으므로, static let shared를 통해서만 인스턴스에 접근할 수 있게 된다. 이는 싱글톤 패턴의 핵심이다.

 

싱글톤 패턴의 단점

1) 테스트 어려움

전역적으로 접근 가능한 인스턴스는 테스트 시에 의존성을 주입하기 어렵게 만들어 테스트를 복잡하게 할 수 있다.

2) 결합도 증가

싱글톤 인스턴스를 여러 클래스에서 직접 참조하면 클래스 간 결합도가 증가하여 코드의 유연성과 재사용성이 떨어질 수 있다.

3) 멀티스레딩 문제

멀티스레딩 환경에서 싱글톤 인스턴스를 적절히 관리하지 않으면 동시성 문제가 발생할 수 있다.

 

 

 

 

정리)

작은 프로젝트나 단순한 애플리케이션에서는 싱글톤 패턴이 더 적합할 수 있다. 코드가 간단하고 구현이 쉬워서 빠르게 개발할 수 있기 때문이다. 그러나, 큰 프로젝트나 복잡한 애플리케이션에서는 의존성 주입이 더 유리해. 테스트가 쉽고 유연하게 객체를 관리할 수 있어서 유지보수가 용이해지기 때문이다.
프로젝트의 규모와 복잡도에 따라 싱글톤 패턴과 의존성 주입 중 적절한 방법을 선택하는 게 좋아 보인다. 필요에 따라 두 패턴을 혼합해서 사용하는 것도 하나의 방법이 될 수 있을것 같기도 하다.

 

 

728x90
반응형

'Architecture' 카테고리의 다른 글

MVI (Model - View - Intent)  (1) 2024.06.07
iOS(UIKit)에서의 Coordinator Pattern  (0) 2023.09.18
iOS(UIKit)에서의 CleanArchitecture+MVVM 예시 뜯어보기  (0) 2023.09.15
MVVM in iOS  (0) 2023.09.04
MVP (Model - View - Present)  (0) 2023.08.28