1. 디자인 패턴이란?
- 설계자로 하여금 재사용이 가능한 설계를 선택하고, 재사용을 방해하는 설계를 배제하도록 도와줌
- 시스템의 유지보수나 문서화를 개선할 수 있고, 클래스의 명세도 정확하게 알 수 있으며, 객체 간의 상호작용 또는 설계의도까지 명확하게 정의할 수 있음.
- 즉, "올바른" 설계를 "빨리" 만들 수 있도록 도와줌.
- 같은 실수를 반복하지 않기 위해 특정 상황에서 발생하는 문제 패턴을 발견하고 해결방안을 기록한 것
- 효율적인 코드를 만들기 위한 방법론
2. 디자인 패턴의 종류
1) 생성 패턴
- 객체의 생성과 초기화를 다룸
- 객체를 만드는 방법에 대한 패턴
2) 구조 패턴
- 객체와 클래스를 조합해 더 큰 구조를 만드는 방법을 다룸
- 객체들의 구성이나 클래스들의 구성을 다루는 패턴
3) 행동 패턴
- 객체나 클래스 사이의 알고리즘, 역할, 책임, 상태 등을 다룸
- 객체들 사이의 상호작용을 다루는 패턴
생성 패턴(Creational Pattern) | 구조 패턴(Structural Pattern) | 행동 패턴(Behavioral Pattern) |
Singleton | Adapter | Command |
Factory Method | Composite | Interpreter |
Abstract Factory | Decorator | Iterator |
Builder | Facade | Mediator |
Prototype | Flyweight | Memento |
Proxy | Observer | |
Bridge | State | |
Strategy | ||
Template Method | ||
Chain | ||
Visitor |
3. 디자인 패턴의 장점
1) 재사용성
- 검증된 해결책을 제공하므로 반복된 문제에 대한 해결책을 개발할 필요 없음
2) 유지 보수성
- 코드의 구조를 개선하여 유지 보수가 쉬워짐
- 특정한 목적에 맞게 각 패턴이 설계되어, 코드가 더 구조화되며 변경이 쉬워지고 가독성이 향상된다.
3) 유연성
- 코드의 구조를 개선하고 더 효율적으로 만들어주어 코드의 유연성이 높아짐
- 새로운 요구사항이나 변경사항에 대한 대응력을 높이고, 코드 변경에 다른 부작용을 최소화 할 수 있음.
4) 성능향상
- 반복적인 코드 작성을 최소화하여 성능을 향상시킴
- 패턴을 사용하여 중복 코드가 감소하고, 재사용성이 높아져 더 효율적인 코드가 됨
5) 표준화
- 비공식적으로 개발자들 간의 공통된 언어를 제공
- 개발 프로세스에서의 의사소통과 협업을 더 쉽게 해주고, 전체 sw 개발 산업에서의 일관성을 유지하는데 도움이 됨.
4. 디자인 패턴의 단점
1) 복잡성
- 패턴을 일반적으로 다른 클래스와 객체와의 상호작용을 추가하므로 클래스 간의 관계가 더 복잡해질 수 있음.
2) 오용
- 간단한 문제를 복잡하게 해결하려 시도할 수 있음.
- 프로그램의 효율성을 저하시키고 유지보수를 어렵게 함.
3) 부적절한 적용
- 잘못된 디자인 패턴을 적용하면 문제가 더 복잡해질 수 있음.
- 각 패턴이 해결하려는 문젝와 일치하지 않는 다른 문제에 적용하면 예상치 못한 결과가 발생할 수 있음.
4) 추가 비용
- 일반적으로 디자인 패턴으로 구현시 코드 복잡성이 증가하고, 더 많은 시간과 노력이 필요함.
5. 참고 사이트
https://readystory.tistory.com/114
https://todamfather.tistory.com/86