본문 바로가기
Swift/패턴

싱글톤 패턴 (Singleton Pattern)

by 밤새는탐험가 2024. 4. 5.

싱글톤 패턴 

특정 용도로 객체를 1개만 생성

공용으로 사용하고 싶을 때 사용하는 디자인 유형

 

 

싱글톤 생성하기 

static 프로퍼티로 인스턴스 생성하기 

class FruitInfo {
    static let shared = FruitInfo()
    
    var name: String?
    var count: Int?
}

 

 

Init 함수 접근제어자를 private로 하기 

▶️ init 함수를 통해 인스턴스 생성을 막기 위함 

class FruitInfo {
    static let shared = FruitInfo()
    
    var name: String?
    var count: Int?
    
    private init() { }
}

 

 

 

싱글톤 접근 하기

어디서든 shared란 static 프로퍼티로 접근하면 된다. 

let marketA = FruitInfo.shared
let marketB = FruitInfo.shared

 

 

싱글톤 패턴을 적용한 FruitInfo 의 name 프로퍼티에 "apple"이라고 기본값을 할당한 경우

 

class FruitInfo {
    static let shared = FruitInfo()
    
    var name: String? = "apple"
    var count: Int?
    
    private init() { }
}

 

 

그리고 다시 marketA와 marketB를 출력하면

둘다 "apple"이 출력된다.

 

print(marketA.name!)     // apple
print(marketB.name!)     // apple

 

 

싱글톤의 장단점 

장점

  •  한 번의 Instance만 생성하므로 메모리 낭비를 방지할 수 있음
  •  Singleton Instance는 전역 Instance로 다른 클래스들과 자원 공유가 쉬움

 

단점

  • Singleton Instance가 너무 많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의 Instance들 간 결합도가 높아져  "개방=폐쇄" 원칙을 위배함 (객체 지향 설계 원칙 어긋남)