공부해봅시당
[디자인패턴] 디자인 패턴이란? 본문
디자인 패턴이란?
디자인 패턴이란 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책들을 말한다.
이는 코드에서 반복적으로 되풀이되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 청사진들을 미리 만들어 놓은 것과 같다.
디자인 패턴의 특징
- 표준화된 라이브러리들이나 함수들을 코드에 복사해 사용하는 것처럼 패턴들을 붙여넣기식으로 사용할 수 없음
- 패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념
- 패턴의 세부 개념들을 적용하여 프로그램에 맞는 해결책을 구현할 수 있음
디자인 패턴과 알고리즘의 차이
패턴은 알고리즘과 자주 혼동된다. 하지만 둘 사이의 명확한 차이가 존재한다.
공통점
두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명
차이점
알고리즘
- 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의
- 요리법에 비유 > 목표를 달성하기 위한 명확한 단계 제시
패턴
- 해결책에 대한 더 상위 수준의 설명
- 예를 들어 같은 패턴을 두 개의 다른 프로그램에 적용하면 두 프로그램의 코드는 다를 것
- 청사진에 비유 > 결과와 기능들은 제시하나 구현 단계 및 순서는 사용자가 결정
디자인 패턴을 배워야 하는 이유
- 디자인 패턴은 소프트웨어 디자인의 일반적인 문제들에 대해 시도되고 검증된 해결책들을 모은 것
- 이러한 문제들을 다루지 않더라도 패턴을 알고 있으면 여전히 쓸모가 있는데, 그 이유는 패턴을 배우게 되면 객체 지향 디자인의 원칙들을 사용해 많은 종류의 문제를 해결하는 방법들을 배울 수 있기 때문
- 디자인 패턴은 당신과 당신의 팀원들이 더 효율적으로 의사소통하는 데 사용할 수 있는 공통 언어를 정의
- 예를 들어, 팀이 디자인 패턴을 이해하면 업무 처리 중 '그 문제를 위해서는 그냥 싱글턴을 사용하세요'라고 말하면 모두가 무엇을 뜻했는지 이해할 수 있을 것이며 싱글턴 패턴에 포함된 개념들은 설명할 필요도 없을 것
디자인 패턴에 대한 비판
하지만 디자인 패턴에 대한 비판도 존재한다. 아래는 디자인 패턴에 대한 비판이다.
- 약한 프로그래밍 언어를 위한 클루지로 작동
- 일반적으로 패턴의 필요성은 개발자가 추상화 수준이 부족한 프로그래밍 언어나 기술을 선택했을 때 발생
- 이 경우 패턴은 약한 프로그래밍 언어에 필요한 초능력을 부여하는 클루지(어떤 문제에 대한 서툴거나 세련되지 않은 -그러나 놀라울만큼 효과적인- 해결책)로 작동
- 예를 들어 Strategy 패턴은 대부분의 최신 프로그래밍 언어에서 간단한 익명(람다) 함수로 구현할 수 있음
- 비효율적인 해결책
- 패턴은 이미 널리 사용되는 문제 해결 방식의 체계화를 시도
- 많은 사람이 이렇게 통합된 패턴들을 도그마처럼 신봉하여 패턴을 프로젝트의 맥락에 따라 적용하지 않고 '문자 그대로' 구현할 수 있음
- 부당한 사용
- 망치만 있으면 모든 것이 못처럼 보임
- 많은 초보자는 패턴을 갓 배운 후, 더 간단한 코드로도 문제 해결이 되는 상황에도 모든 곳에 패턴을 적용하려고 함
디자인 패턴의 종류
디자인 패턴은 복잡성, 상세도, 전체 시스템에 대한 적용 범위에 따라 분류된다.
가장 기본적인 하위 설계 패턴을 '이디엄'이다. 일반적으로 이디엄은 단일 프로그래밍 언어에만 적용할 수 있다.
아키텍처 패턴은 상위 설계 패턴이며 가장 보편적으로 사용된다. 개발자들은 거의 모든 언어로 아키텍처 패턴들을 구현할 수 있으며 다른 패턴들과 달리 애플리케이션 전체의 구조(아키텍처)를 설계하는 데 사용할 수 있다.
또한 모든 패턴은 패턴의 의도 또는 목적에 따라 분류할 수 있다. 여기서는 패턴의 주요 세 가지 그룹에 대해 다룰 것이다.
- 생성 패턴
- 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘 제공
- 팩토리 메소드, 추상 팩토리, 빌더, 프로토타입, 싱글톤 등
- 구조 패턴
- 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법 설명
- 어댑터, 브리지, 복합체, 데코레이터, 퍼사드, 플라이웨이트, 프록시 등
- 행동 패턴
- 객체 간의 효과적인 의사소통과 책임 할당 처리
- 책임 연쇄, 커맨드, 반복자, 중재자, 메멘토, 옵저버, 상태, 전략, 템플릿 메소드, 비지터 등
참고 자료
https://refactoring.guru/ko/design-patterns
디자인 패턴들
refactoring.guru
'STUDY > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] MVC와 MVP 패턴 비교 (0) | 2023.06.09 |
---|---|
[디자인 패턴] MVC 패턴 (0) | 2023.06.09 |
[디자인패턴] 행동 패턴 - 전략 패턴 (0) | 2023.06.05 |
[디자인 패턴] 생성 패턴 - 팩토리 메소드 패턴 (0) | 2023.06.05 |
[디자인 패턴] 생성 패턴 - 싱글톤 패턴 (2) | 2023.06.05 |