디자인 패턴(Design Pattern)에 대해서
by Frinee우선 디자인 패턴을 알아보기 전에
프로그래밍할 때 쓰는 React.js, Vue.js, Spring 등 라이브러리나 프레임워크에 대해서 알아보자
- 라이브러리
- 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것을 의미
- 폴더명, 파일명 등에 대한 규칙이 없고 비교적 자유로움
- 직접 컨트롤이 가능함
- 프레임워크
- 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것은 동일함.
- 다만 폴더명, 파일명 등에 대한 규칙이 있으며 라이브러리에 비해 더 엄격
1. 디자인 패턴 (Design Pattern)
디자인 패턴이라 프로그램을 설계할 때 발생했던 문제를 해결하기 위해 규약 형태로 만들어 놓은 것을 의미함.
1.1 대표적인 디자인 패턴들
- 싱글톤 패턴(singleton pattern): 하나의 클래스에 오직 하나의 인스턴스만을 가지는 패턴. 하나의 인스턴스를 생성하고 다른 모듈들이 공유하며 사용하기 때문에 인스턴스 생성 비용이 줄어듬.
- 팩토리 패턴(factory pattern): 객체 코드에서 객체 생성 부분을 떼어내 추상화한 패턴
- 상위 클래스가 뼈대 역할, 하위 클래스가 객체 생성 역할을 하는 패턴
- 상위/하위 클래스가 분리되어 유연성과 유지보수성이 증가
- 전략 패턴(strategy pattern): 정책 패턴(policy pattern)이라 하며, 객체의 행위를 바꾸고 싶은 경우 "전략"이라 부르는 캡슐화된 알고리즘을 컨텍스트 안에서 바꿔주면서 상호교체할 수 있는 패턴
- 옵저버 패턴(observer pattern): 주체가 어떤 객체 상태변화를 관찰하여 상태변화가 있을 때마다 메서드를 통해 옵저버들에게 변화를 알려주는 패턴, ex) 팔로우 기능
- 프록시 패턴(proxy pattern): 객체에 대한 접근을 제어하기 위해 대리자(프록시) 역할을 하는 객체를 사용하는 디자인 패턴, 프록시 패턴은 주로 객체의 생성, 사용 또는 접근에 대한 제어가 필요할 때 사용
- 프록시 서버(proxy server): 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 프로그램/시스템을 일컬음.
- 이터레이터 패턴(Iterator pattern): 이터레이터(iterator)를 사용하여 컬렉션과 같은 데이터 구조 내의 요소에 순차적으로 접근할 수 있는 디자인 패턴
- 노출모듈 패턴(revealing module pattern): 즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴
- MVC 패턴(Model-View-Controller pattern): 모델(Model), 뷰(View), 컨트롤러(Controller)로 이우러진 디자인 패턴 ex) Spring, Django(MTV라고 불림)
- 모델(Model): 애플리케이션 데이터인 데이터베이스, 상수, 변수 등을 뜻함.
- 뷰(View): inputbox, checkbox, textarea 등의 사용자 인터페이스 요소
- 컨트롤러(Controller): 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할, 즉, 메인로직 역할
- MVP 패턴(Model-View-Presenter pattern): MVC에서 C에 해당하는 컨트롤러가 프레젠터(presenter)로 교체된 패턴, 뷰와 프레젠터는 일대일 관계로 더 강한 결합을 지닌 패턴
- MVVM 패턴(Model-View-View Model Pattern): MVC에서 C에 해당하는 컨트롤러가 뷰모델(View model)로 바뀐 패턴, 뷰- 뷰모델 사이의 양방향 데이터 바인딩을 지원하여 재사용성과 테스트가 쉬운 장점이 있음 ex) Vue.js
- 뷰모델(View model): 뷰(View)를 더 추상화한 계층으로 뷰에 표시할 데이터와 뷰 상태를 관리
2. 정리
이 패턴들을 실제로 중요하면서도 정처기 실기/필기에도 나오기 때문에
외워두면 좋다.
그리고 사실 더 많은 디자인 패턴이 존재하고 더 중요하게 쓰이는 패턴도 많이 있지만
다 쓸 수가 없기 때문에 중요한 패턴은 따로 빼서 다루기로 정리하였다
'Computer Science > 소프트웨어 구축' 카테고리의 다른 글
프로그래밍 패러다임 (Programming Paradigm) (0) | 2024.08.14 |
---|
블로그의 정보
프리니의 코드저장소
Frinee