[Swift] Singleton Pattern이란?

seokhoho·2023년 12월 1일
0

swift

목록 보기
2/5

싱글톤 패턴(Singleton Pattern)이란?

한 클래스에 대한 인스턴스(Instance)를 최초로 생성될 때 한번만 생성해 전역에 두고 이후로 이 인스턴스만 접근 가능하게 하는 것

싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴이다.


싱글톤을 사용하지 않았을 때

class NormalPet {
    var type: String = "짹짹이"
}

let bird = NormalPet()
let cat = NormalPet()
cat.type = "야옹이"
let dog = NormalPet()
dog.type = "멍멍이"

print(bird.type) // 짹짹이
print(cat.type) // 야옹이
print(dog.type) // 멍멍이

하나하나 서로 다른 인스턴스가 만들어져서 type의 값이 다르게 나온다.


싱글톤을 사용했을 때

class SingletonPet {
    
    static let shared = SingletonPet()
    
    var type: String = "짹짹이"
    
    private init() {}
}

let bird = SingletonPet.shared
let cat = SingletonPet.shared
cat.type = "야옹이"
let dog = SingletonPet.shared
dog.type = "멍멍이"

print(bird.type) // 멍멍이
print(cat.type) // 멍멍이
print(dog.type) // 멍멍이

하나의 인스턴스를 사용하기 때문에 bird, cat, dog 전부 type의 값이 멍멍이로 나온다.


싱글톤 생성 방법

  • 클래스 내부에 static을 활용해서 인스턴스를 저장할 프로퍼티를 생성
  • 클래스의 init을 private으로 지정하기
    • init 함수를 호출해 인스턴스를 다시 생성하는 것을 막기 위함
class SingletonPet {
    
    static let shared = SingletonPet()
    
    private init() {}
}

접근 방법

  • 클래스안에 static을 활용한 프로퍼티에 접근해 주면 된다
    변수/상수 변수명 = 클래스명.프로퍼티명
let cat = SingletonPet.shared
cat.type = "야옹이"
let dog = SingletonPet.shared
dog.type = "멍멍이"

이렇게 하나의 인스턴스를 공유할 수 있다.


Singleton 장단점

장점

  • 한 번의 Instance만 생성하므로 메모리 낭비를 방지할 수 있음
  • Singleton Instance는 전역 Instance로 다른 클래스들과 자원 공유가 쉬움
  • DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용 (쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체등)

단점

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


소감

이번 싱글톤 정리를 통해서 클래스, 객체, 인스턴스 용어들의 정의가 모호해서 이해가 쉽지 않았다. 바로 클래스, 객체, 인스턴스를 찾아서 정리를 해봐야겠다.





참조
https://babbab2.tistory.com/66
https://www.youtube.com/watch?v=bhyCUykI4Dg
https://velog.io/@naroti/iOS-%EA%B0%9C%EB%B0%9C-Singleton-Pattern-q4k3uzgf0n

profile
iOS 코린이

0개의 댓글