728x90
singleton pattern (싱글톤 패턴)
하나의 클래스가 하나의 인스턴스만 가지는 패턴.
하나의 클래스를 이용해 여러번 인스턴스화를 시켜 여러 인스턴스를 가질 수 있지만,
그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스만 만드는 것입니다.
장점
- 인스턴스 생성 비용 감소
- 한 번 생성하여 여러 모듈이 공유해 사용하기 때문에 생성 비용이 줄어드는 장점이 있다.
단점
- 의존성 상승
- 여러 모듈이 같은 데이터를 공유해 사용하기 때문에 의존성이 상승하는 단점이 있다.
- DI(Dependency Injection, 의존성 주입)을 통해 결합도를 낮출 수 있다.
- 메인 모듈이 직접 하위 모듈에 의존성을 주지 않고, 중간에 의존성 주입자를 두어 메인 모듈이 간접적으로 의존성을 주입하는 방식 (Factory를 사용!)
- 원칙 : "상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한, 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부 사항에 의존하지 말아야 한다."
- 장점 : 모듈간 관계가 명확해지므로 테스팅 및 마이그레이션에 용이
- 단점 : 모듈이 분리되 클래스 수가 증가하므로 복잡도가 증가할 수 있다. 런타임시 성능에도 불리하다.
- TDD(Test Driven Development)에서의 어려움
- 각 테스트가 독립적이어야 하지만, 하나의 인스턴스를 기반으로 구현하는 패턴이므로
'독립적인' 인스턴스를 만들기 어렵다.
- 각 테스트가 독립적이어야 하지만, 하나의 인스턴스를 기반으로 구현하는 패턴이므로
응용 분야 및 예제
- 데이터베이스 연결 모듈
- ex. 어떠한 프로그램의 캐시나 로그를 가지고 관리하는 객체가 있다. 매번 새롭게 생성해 사용할 경우, 같은 프로그램임에도 불구하고 다른 데이터를 가지게 된다. 즉, 싱글톤 객체가 필요한 경우이다.
예제 코드 (Kotlin)
* object : 클래스를 정의함과 동시에 객체를 생성하는 것
정의와 동시에 생성되므로 객체(인스턴스)가 한 번만 생성되도록 할 수 있음.
* companion object (동반 객체) : 클래스를 인스턴스화 하지 않고, 사용할 수 있도록 함
참고
- 이렇게도 쓸 수 있다!
https://korean-otter.tistory.com/229
궁금증
- 응용분야에 데이터베이스라 적었는데, 데이터베이스에서는 왜 많이 사용되는지 이 부분은 잘 모르겠다...
728x90
'CS note > 디자인 패턴, 프로그래밍 패러다임' 카테고리의 다른 글
MVC pattern (Model View Controller) (0) | 2023.04.30 |
---|---|
strategy pattern (전략 패턴) (1) | 2023.01.27 |
factory pattern (팩토리 패턴) (0) | 2023.01.25 |
디자인 패턴 및 프로그래밍 패러다임 (0) | 2023.01.20 |
댓글