Singleton

윤주현·2023년 6월 30일

Design Pattern

목록 보기
3/4

싱글톤 패턴이란?

단 하나의 인스턴스를 가지는 클래스를 이용한 디자인 패턴.

예시

일반적인 경우

class Car {
    var color = "Red"
}

let myCar = Car.singletonCar
myCar.color = "Blue"

let yourCar = Car.singletonCar
print(yourCar.color) // Red

일반적으로 클래스를 통해 생성한 인스턴스는 이렇다. Car 클래스로 myCar와 yourCar라는 2개의 인스턴스를 생성했다. myCar의 color 속성을 Blue로 변경해도 다른 인스턴스인 yourCar의 color에는 아무런 영향을 미치지 않는다.

싱글톤 패턴

class Car {
    var color = "Red"
    static let singletonCar = Car()
    private init(){}
}

class A {
    init() {
        Car.singletonCar.color = "Brown"
    }
}

class B {
    init() {
        print(Car.singletonCar.color)
    }
}

let a = A()
let b = B() // Brown

이전의 Car클래스와는 다르게 singleronCar라는 인스턴스를 클래스 안에 static 키워드를 사용해서 전역적으로 사용할 수 있게 만들고 private init을 넣어 다른곳에서 Car클래스를 초기화 할 수 없게 만들었다.

그리고 A클래스에서 singletonCar의 color 속성을 Brown으로 변경했고 B클래스에서는 singletonCar의 color속성을 프린트하여 Brown이라는 출력값을 얻었다.

Class는 참조 타입이므로 언제나 같은 singletonCar 인스턴스에 접근할 수 있는것이다. 그렇기 때문에 싱글톤 패턴은 프로젝트 내에서 하나의 인스턴스를 공유하고 싶을 때 사용한다.

공유 인스턴스 vs 싱글톤 패턴

let defaults = UserDefaults.standard
let sharedURLSession = URLSession.shared

위와 같은 경우가 싱글톤이라고 알려져 있지만 정확히는 싱글톤이 아니라 공유 인스턴스다.
싱글톤은 단 하나의 인스턴스만을 가져야 하는데 위의 경우는 인스턴스를 여러개 생성할 수 있기 때문이다.

0개의 댓글