HIT해

[Swift 기초문법 - 47] Singleton 패턴 본문

Swift/Swift 기초문법

[Swift 기초문법 - 47] Singleton 패턴

힛해 2024. 8. 19. 21:23
728x90

Singleton 패턴이란?

스위프트에서 객체를 생성하는 대표적인 방법론

애플리케이션이 시작될 때 객체의 인스턴스를 최초 1회만 생성하여 사용하는 디자인 패턴이다!

메모리를 하나만 쓰는 것이 특징이다.

 

 

일반적인 객체 생성 사용 예시

class Pet{
    
}

let Pet1 = Pet()

let Pet2 = Pet()

 

이렇게 생성했을때 Pet1과 Pet2는 다른 메모리 주소를 할당받는다.

그럼 메모리를 두배로 차지하기에 비효율적이라고 말할 수 있다.

 

Singleton 패턴 사용 예시

final class Pet{
        static let shared = Pet()
    private init(){}
}

let Pet1 = Pet.shared

let Pet2 = Pet.shared

 

이때 Pet1과 Pet2는 같은 주소를 바라보게된다.

 

그말은 즉슨 Pet인스턴스의 변수가 변경되면 Pet1과 Pet2 모두 변경된 값에 접근할 수 있게 된다.

 

final class Pet{
        static let shared = Pet()
    private init(){}
    
    var name : String = "흰둥이"
}

Pet.shared.name = "도라에몽"

let Pet1 = Pet.shared

let Pet2 = Pet.shared

// 둘다 도라에몽

 

 

보통 이런 Sington패턴에서는 final class를 주로 사용하는데 싱글톤의 본질적인 특성을 보호하기 위해 상속을 막아야하기 떄문이다.

싱글톤 패턴의 목적은 애플리케이션 전역에서 단 하나의 인스턴스만을 유지하는 것이기에 'final class'를 사용하면 이 목적을 더 안전하고 더 명확하게 구현할 수 있다.

 

 

 

정리하자면

장점

  1. 인스턴스를 최초 1회만 생성하므로 메모리와 성능 측면에서 효율이 좋다
  2. 클래스 간 데이터 공유가 쉽다
  3. 인스턴스가 1개라는 것을 보증받는다.
    1. (Thread Safe) : 여러 스레드에서 어떤 객체에 대해 동시에 접근이 이루어져도 프로그램의 동작에 이상이 없음을 뜻함

단점

  1. 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 개방-폐괘 원칙(OCP)를 위배하기 된다
  2. 따라서 수정과 테스트가 어려워진다.
  3. 싱글톤을 위한 코드를 구현해야한다
    1. 스위프트상에서는 쉽게 구현이 가능하다