◎ 디자인 패턴
: 프로그램들을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록
하나의 '규약' 형태로 만들어 놓은 것.
1. 싱글톤 패턴 (singleton pattern)
: 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
: 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용
: 데이터베이스 모듈에 많이 사용
○ 장점
- - 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하므로 인스턴스 생성시 비용이 적음.
○ 단점
- - TDD(Test Driven Development)를 할 때 어려움이 있음.
--> TDD는 단위 테스트를 주로 하는데, 단위 테스트는 각 테스트가 서로 독립적이어야 하고 테스트를 어떤 순서로든 실행할 수 있어야함.
--> 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴 -> 각 테스트마다 '독립적인' 인스턴스를 만들기 어려움.
- - 인스턴스를 다른 모듈들이 공유 -> 의존성이 높아짐.
◎ 의존성 주입(DI, Dependency Injection)
: '의존성 주입자(dependency injector)'가 개입하여 메인 모듈이 '간접적'으로 의존성을 주입하는 방식.
- - 메인 모듈(상위 모듈)은 하위 모듈에 대한 의존성 감소 (aka. 디커플링 됨)
- - 모듈간의 결합을 조금 더 느슨하게 만들어줌 --> 싱글톤패턴의 존속성 및 의존성이 높은 단점 해소
○ 의존성 주입 원칙
① 상위 모듈은 하위 모듈에서 어떤 것도 가져오지 않음.
② 둘 다 추상화에 의존해야 함. 이때 추상화는 세부 사항에 의존하지 말아야 함.
○ 장점
- - 모듈 쉽게 교체 가능 --> 테스팅 및 마이그레이션(migration)이 용이
- - 구현 시 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어줌
--> 애플리케이션 의존성 방향 일관됨
--> 애플리케이션 쉽게 추론 가능
--> 모듈 간 관계들이 좀 더 명확해짐
○ 단점
- - 클래수 수 증가 --> 복잡성 증가 및 약간의 런타임 패널티 생길 수 있음
2. 팩토리 패턴 (factory pattern)
: 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴
: 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴
○ 장점
- 상위 클래스, 하위 클래스 분리 --> 결합 느슨함, 유연성 증가
- 객체 생성 로직이 분리 --> 코드를 리팩터링하기 쉬움 --> 유지보수성 증가
'공부' 카테고리의 다른 글
[CS 공부] 디자인 패턴 - MVC패턴, MVP패턴, MVVM패턴 (0) | 2024.03.18 |
---|---|
그래프(Graph) (0) | 2024.02.05 |
[CS공부] 디자인패턴 - 프록시 패턴, 이터레이터 패턴, 노출모듈 패턴 (0) | 2023.12.17 |
상속과 구현의 차이 (0) | 2023.12.10 |
[CS 공부] 디자인 패턴 - 전략 패턴, 옵저버 패턴 (0) | 2023.12.10 |