Architecture

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

최지철 2024. 7. 23. 10:15
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
반응형