iOS Swift 에서 Singleton 사용하기
포스트
취소

iOS Swift 에서 Singleton 사용하기

안녕하세요. narvis2 입니다.
이번시간에는 Swift에서 Singleton 패턴을 사용하는 법에 대하여 알아보도록 하겠습니다.

🍀 Singleton


  • Kotlin의 compainion object와 유사함
  • 👍 장점
    • 단 한번의 instance만 새성하므로 메모리 낭비를 방지할 수 있음
    • Singleton instance는 전역 instance로 다른 클래스들과 자원 공유 가 쉬움
    • DBCP(Database Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용
      • Thread Pool, Cache, 대화상자, 사용자 설정, Registry 설정, Log 기록 객체 등..
  • 👎 단점
    • Singleton Instance가 너무 많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의 Instance들 간 결합도가 높아져 개방=폐쇄 원칙을 위배함(객체 지향 설계 원칙에 어긋남)
    • 따라서 유지 보수 측면에서 어려워짐
      • 수정과 Test가 어려워짐

☘️ Swift 에서 Singleton 사용

  • Static을 사용해 Type PropertyInstance를 생성하면, 사용 시점에 초기화(Lazy) 가 되기 때문에 Singleton Instance가 최소 생성되기 전까진 메모리에 올라가지 않고, Dispatch_once도 자동 적용됨
    • 별도의 코드 없이 Instance가 여러 개 생성되지 않는, Thread-Safe한 방법이 됨
  • 혹시라도 init()을 호출하여 Instance를 또 생성하는 것을 막기 위해 init() 함수 접근 제어자를 private로 지정

예제 👇

1
2
3
4
5
6
7
8
9
10
11
12
class UserInfo {
    static let shared = UserInfo()

    var id: String?
    var password: String?
    var name: String?

    private init() {}
}

let userInfo = UserInfo.shared
userInfo.id = "YoungJun"
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.