-
디자인 패턴Computer Science 2023. 5. 18. 16:00
1. 디자인 패턴이란?
디자인 패턴은 소프트웨어 디자인, 설계 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책.
이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진과 비슷하다.
표준화된 라이브러리들이나 함수들을 코드에 복사해 사용하는 것
(backend에서도 라이브러리 개념은 무엇이 있을까? 같은 라이브러리라고 부르나? )
처럼 패턴들을 붙여넣기식으로 사용할 수 없다.
패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이다.
패턴의 세부 개념들을 적용하여 프로그램에 맞는 해결책을 구현할 수 있다.
패턴은 알고리즘과 자주 혼동된다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문이다.
알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의하지만, 패턴은 해결책에 대한 더 상위 수준의 설명이다.
예를 들어 같은 패턴을 두 개의 다른 프로그램에 적용하면 두 프로그램의 코드는 다를 것이다.
이유는?
알고리즘은 요리법에 비유할 수 있지만
패턴은 요리법이 아닌 청사진에 더 가깝다.
알고리즘과 요리법 둘 다 목표를 달성하기 위한 명확한 단계들이 제시되어 있지만
반면에 청사진은 결과와 기능들은 제시하나 구현 단계 및 순서는 사용자가 결정한다.
결국 디자인 패턴은 구체적인 소스코드가 아니라 문제를 어떻게 해결하는지에 대한 설명 또는 템플릿이다.
개발자는 상황에 맞는 디자인 패턴을 선정하고, 디자인 패턴에 따라 코드를 구현해야 한다.
2. 패턴의 정의
패턴의 개념은 건축 분야에서 시작되었다.
패턴이란 객체지향 설계 시 공통적으로 발생하는 문제를 해결하기 위한 전형적인 해결책.
해결책은 수많은 프로젝트에서 문제를 반복적으로 해결하면서 발견되었고
누군가 그 해결책에 이름을 붙이고 상세한 설명을 기술하면서 해결책이 패턴으로 굳혀졌다.
3. 디자인 패턴의 필요성
전체적인 개발 시간 단축
디자인 패턴은 다양한 프로젝트에서 적용되고 검증됐다.
문제를 해결하기 위한 방법을 처음부터 끝까지 생각하려고 하면 매우 시간이 오래걸리지만
이미 잘 정리된 패턴을 사용하면 전체적인 개발 시간이 단축된다.
편리한 커뮤니케이션 수단
디자인 패턴과 관련된 용어를 많이 사용하고 있으며 개발자들에게 이미 잘 알려져있다.
원활한 소통을 위해서 디자인 패턴을 알아두면 편리하고 더불어 설계 담당자가 디자인 패턴을 알고 있다면
더 고차원적인 설계 방안을 논의 할 수 있다.
4. 디자인 패턴 유형
목적에 따른 디자인 패턴 종류
목적 : 패턴이 무엇을 하는지 정의
생성(Creational Pattern) : 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴
기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘들을 제공구조(Structural Pattern) : 더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴
구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명
행위(Behavioral Pattern) : 클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴
객체 간의 효과적인 의사소통과 책임 할당을 처리
범위에 따른 디자인 패턴 종류
범위 : 패턴을 클래스에 적용하는지, 객체에 적용하는지에 따라 범위가 구분 되는 패턴
클래스 : 클래스 간 관련성, 컴파일 타임에 정적으로 결정
객체 : 객체 간 관련성을 다루는 패턴, 런타임에 동적으로 생성
5. 디자인 패턴 종류
생성 구조 행위 Singleton(1.1 싱글톤) Proxy(1.5 프록시) Strategy(1.3 전략) Factory Method(1.2 팩토리) Decorator Observer(1.4 옵저버) Prototype Facade Iterator(1.6 이터레이터) Abstract Factory Flyweight Template Method Builder Bridge Mediator Composite State Adapter Visitor Command Interpreter Memento Chain of Responsibility revealing module(1.7 노출모듈)
MVC(1.8 MVC)
MVP(1.9 MVP)
MVVM(1.10 MVVM)
디자인 패턴은 일종의 굳어진 약속이고, 개발 시 소통을 용이하게 만드는 장치인것 같다.
중요도는 일반 언어, 프레임워크 작동 방식 및 이후에 공부해야 할 부분이 더 중요한것 같다.가볍게 어떤 패턴이 있는지 대략적으로 파악하고
React의 MVC와 Vue의 MVVM, Redux의 옵저버/Flux 패턴 위주로 정리하면 좋을 것 같다.
질문
그렇다면 알고리즘의 상위개념은 디자인 패턴이라고 해도 무방한가?
객체지향 설계는 무엇일까?
클래스와 객체의 차이점을 무엇일까?
참조
https://refactoring.guru/ko/design-patterns/what-is-pattern
https://coding-factory.tistory.com/708
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
'Computer Science' 카테고리의 다른 글
프로그래밍 패러다임(작성중) (2) 2023.05.19