-
디자인 패턴 1. 싱글톤 패턴 (TDD, 의존성 주입)Today I Learned/CS공부 2023. 12. 21. 18:42
디자인 패턴이란 프로그램설계시 발생한 문제점을 객체간의 상호관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것을 의미한다.
1. 싱글톤 패턴
싱글톤패턴은 하나의 클래스에 오직 하나의 인스턴스만을 가지는 패턴으로써, 하나의 클래스를 기반으로 여러개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는 데 쓰이며, 보통 데이터베이스 연결 모듈에 많이 사용한다.
싱글톤패턴은 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어든다는 장점이 있으나, 의존성이 높아진다는 단점이 있다.
싱글톤패턴은 TDD(테스트주도개발)을 할 때 걸림돌이 되는데, TDD를 할 때 단위 테스트를 주로 하는데 단위 테스트는 서로 독립적이어야 하며, 테스트를 어떤 순서로든 실행할 수 있어야 하기 때문이다. 하지만 싱글톤패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기가 어렵다.
또한 싱글톤패턴은 사용하기가 쉽고 굉장히 실용적이지만, 모듈간의 결합을 강하게 만들수 있다는 단점이 있다. 이때 의존성주입 (Dependency Injection)을 통해 모듈간의 결합을 조금 더 느슨하게 만들어서 해결할 수 있다.
의존성 주입
- 의존성 주입의 장점
의존성주입을 하게 되면, 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고, 마이그레이션하기에도 수월해진다. 또한, 구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어 주기 때문에 애플리케이션 의존성 방향이 일관되고, 애플리테이션을 쉽게 추론할 수 있으며, 모듈 간의 관계들이 조금 더 명확해질 수 있다.
- 의존성 주입의 단점
모듈들이 더욱어 분리되므로, 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 페널티가 생기기도 한다. 의존성주입은, 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 하고, 둘 다 추상화에 의존해야 하며, 이 때 추상화는 세부 사항에 의존하지 않아야 한다는 의존성 주입 원칙을 지켜 만들어져야 한다.
'Today I Learned > CS공부' 카테고리의 다른 글
디자인패턴 6. 프록시패턴, 프록시 서버 (0) 2023.12.28 디자인패턴 5 - MVC, MVP , MVVM 패턴 (0) 2023.12.26 디자인패턴 4- 이터레이터 패턴, 노출모듈 패턴 (0) 2023.12.24 디자인 패턴 3- 옵저버 패턴, 프록시 객체 (0) 2023.12.23 디자인 패턴 2. 팩토리 패턴, 전략 패턴 (0) 2023.12.22