Swift) Singleton Pattern에 대해 설명하시오.
Singleton Pattern
- 특정 용도로
객체를 하나만 생성하여,공용으로 사용하고 싶을 때 사용하는 디자인 유형
1 | // User의 정보를 저장하는 클래스 |
- 위와 같은 UserInfo 클래스가 있을 때,
A ViewController에서는 id, B ViewController에서는 password, C ViewController에서는 name을 입력받아 전달해야 한다고 생각해보자.
1 | //A ViewController |
이렇게 A, B, C ViewController에 각각 UserInfo 객체를 만들어서 저장하면,
![]()
💡 한 인스턴스에 모든 정보가 저장되는 것이 아닌, 위 사진처럼
각 Instance의 프로퍼티에만 값이 저장되는 것을 볼 수 있다.
위와 다르게, 한 인스턴스에 모든 정보를 저장하고 싶다면?
UserInfo를 싱글톤으로 만들어 사용하기
- 클래스에 대한 Instance는 최초 생성될 때
딱 한번만 생성해서전역에 두고, 그 이후로는 이Instance만 접근 가능하게 한다.
![]()
💡 한 인스턴스로
어느 클래스에서든 접근이 가능하다.
Singleton Class 만드는 법
static 프로퍼티로 인스턴스 생성하기
- 전역으로 저장될 것이므로, static을 이용해 Instance를 저장할 프로퍼티를 하나 생성한다.
1 | class UserInfo { |
init 함수 접근제어자를 private로 지정하기
- 혹시라도 init 함수를 호출해 Instance를 또 생생하는 것을 막기 위해, init() 함수 접근 제어자를 private로 지정해주면 된다.
1 | class UserInfo { |
Singleton Class 접근하는 방법
- 어느 클래스에서든 shared라는 static 프로퍼티로 접근하면, 하나의 Instance를 공유할 수 있다.
1 | //A ViewController |
Singleton Pattern의 장단점
장점
- 한 번의 Instance만 생성하므로 메모리 낭비를 방지할 수 있다.
- Singleton Instance는 전역 Instance로 다른 클래스들과의 자원 공유가 쉽다.
- DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용 (쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체 등)
단점
- Singleton Instance가 너무 많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의 Instance들 간 결합도가 높아져 “개방=폐쇄” 원칙을 위배한다. (객체 지향 설계 원칙 어긋남)
- 수정과 테스트가 어려워진다.
iOS Cocoa 프레임워크에서는 많은 싱글톤 패턴을 사용
1 | let screen = UIScreen.main |
참고
Swift) Singleton Pattern에 대해 설명하시오.
https://suzumsz.github.io/2021/10/11/Swift/Singleton Pattern/