싱글톤 패턴
생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고
최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 디자인 유형
- 주로 공통된 객체를 여러개 생성해서 사용
- 생성자를 private으로 선언
- new를 통한 객체 생성 불가
- 직접적인 접근 불가
구현
class SingleTon {
private static let Instance = SingleTon()
private init() { }
}
- static을 사용해 인스턴스를 저장할 프로퍼티 생성
- 인스턴스의 재생성을 막기 위해 init() 함수의 접근 제어자를 private으로 지정
사용 사례
- DataBase Connection Pool(DBCP)
- 환경설정, 네트워크 객체, 로그인 정보 등을 특정 용도로 생성
장점
- 메모리 낭비 방지
- 전역성을 띄므로 다른 객체와 공유가 용이
- 두 번째 이용할 때 부터는 객체 로딩 시간이 감소
문제점
- 싱글톤 객체의 역할이 복잡한 경우
해당 객체를 사용하는 다른 객체 간의 결함도가 높아지므로
객체 지향 설계 원칙에 어긋남 (개방-폐쇄 원칙)
↓ 개방 폐쇄 원칙 (OCP: Open-Closed Principle)
더보기
개방 폐쇄 원칙 (OCP: Open-Closed Principle)
소프트웨어 엔티티(클래스, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 변경에 대해서는 닫혀 있어야 함
- 기존 코드를 변경하지 않음
- 기능은 추가할 수 있어야 함
- 주로 객체지향의 추상화, 다형성을 활용
- 싱글톤 객체의 수정이 어렵고 유지보수의 비용이 많이 들음
- 멀티스레드 환경에서 동기화 처리를 하지 않으면, 인스턴스가 2개가 생성될 수 있음
[ 출처 ]
https://ko.wikipedia.org/wiki/%EC%8B%B1%EA%B8%80%ED%84%B4_%ED%8C%A8%ED%84%B4
https://velog.io/@hayeon/Singleton-%ED%8C%A8%ED%84%B4%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0%EB%A5%BC-%EC%98%88%EB%A5%BC-%EB%93%A4%EC%96%B4-%EC%84%A4%EB%AA%85%ED%95%98%EC%8B%9C%EC%98%A4