일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 외적
- 분포 기반 정렬 알고리즘
- 정렬 알고리즘
- 동적 계획법
- Set
- Factory method pattern
- Trie
- BFS
- 자료구조
- 스택
- 비교 기반 정렬 알고리즘
- Queue
- flyweight pattern
- C++ STL 정리
- Union-Find
- 트리
- 트리순회
- 경량 패턴
- object channel
- Unreal Collision
- 깊이 우선 탐색
- 두 직선사이 교점
- 팩토리패턴
- command pattern
- 디자인패턴
- 유니온-파인드
- 생성패턴
- 관찰자(Observer) 패턴
- Abstract Factory pattern
- 명령패턴
- Today
- Total
목록C++/디자인 패턴 (7)
KimMK
디자인 패턴 중 행위 패턴인 상태 패턴은 객체 상태를 캡슐화함으로써 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 내용을 변경하여, 변경 시 원시 코드의 수정을 최소화할 수 있고, 유지보수의 편의성도 갖는 디자인 패턴이다. 즉, 객체 상태에 따라 동작이 달라지는 경우 사용되는 디자인 패턴으로 객체를 상태(state)와 상태에 따른 동작(action)으로 분리하여 구현하고, 객체의 상태가 변할 때마다 적절한 상태에 맞는 동작을 수행하도록 한다. 자기 스스로 상태를 판단해 행동하도록 하는 것인데, 이는 유한 상태 기계(FSM)와 밀접한 관련이 있음 * 유한 상태 기계(FSM): 상태(State)와 상태 전환(Transition)으로 이루어진 모델로, 각 상태에서는 특정 동작을 수행하며 입력이 ..
디자인패턴 중 행위 패턴인 옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 알림이 가고 자동으로 내용이 갱신되는 방법으로 일대다의 의존성을 가진다. 상호작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인 패턴이다. 옵저버 패턴에는 Subject(주체)와 Observer(관찰자)라는 두 가지 개념이 사용되는데, Subject는 상태가 변할 수 있는 객체를 나타내고, Observer는 Subject의 상태에 관심이 있는 객체를 나타낸다. Subject는 Observer의 리스트를 관리하며 Subject의 상태가 변하면 Observer들에게 알림을 보내어 각 Observer가 적절한 조치를 취할 수 있도록 한다. 옵저버 패턴은 MVC(Model-View-Controller) 아..
디자인패턴 중 생성패턴인 싱글턴은 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인패턴이다. 오직 하나의 객체만을 생성할 수 있는 클래스를 의미한다. 따라서 단일 인스턴스를 생성해 공유해서 사용해야 하는 상황에서 유용하다. 싱글턴을 정교하게 구현하고 사용한다면 객체 유일성을 보장하고 어디에서나 싱글턴 객체에 접근할 수 있는 접근성의 장점이 있지만, 득보다 실이 많은 패턴이므로 유의하자!! 싱글턴을 왜 사용할까? (장점) 객체를 하나만 생성해서 공유하기 때문에 메모리 낭비를 방지할 수 있다. 또한, 한 번도 사용하지 않는다면 아예 인스턴스 자체를 생성하지 않는다. 예를 들어 DB연결, NW연결, 파일 입출력 등과 같은 리소스를 사용하는 경우 ..
디자인 패턴 중 구조 패턴인 경량 패턴은 객체를 공유해 메모리 사용량을 줄이는 것을 목적으로 한다. 즉, 한개의 고유 상태를 다른 객체들에서 공유하게 만들어 메모리 사용량을 줄이는 것이다. 경량 패턴은 최적화와 밀접한 관계가 있으며 공장에서 같은 제품을 찍어내며 생산하듯이 대량의 데이터를 찍어내기 위해 사용한다. 내용이 같은 객체가 있으면 새로 객체를 생성하지 않고 기존의 객체를 공유한다 예를 들어, 게임 엔진인 Unreal에서 폴리지와 같은 툴을 사용할 때 풀과 잔디, 조약돌과 같은 애셋을 이용해 폴리지를 적용하려고 할 때 애셋을 하나하나 mesh, texture와 같은 정보를 렌더링하게 되면 엄청난 오버헤드를 초래하게 된다. 그래서 언리얼 엔진의 애셋은 기본적으로 경량 패턴이 적용되는데, 경량 패턴은..
디자인 패턴은 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다. 모듈의 세분화된 역할이나 모듈간의 인턴페이스 구현 방식을 설계할 때 참조할 수 있는 전형적인 해결 방식을 정리한 것으로 디자인 패턴을 통해 설계 문제, 해결 방법, 해결책을 언제 적용해야 할 지, 그 결과로 무엇인지 등을 알 수 있다. 1995년 GoF(Gang of Four)라고 불리는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides가 처음으로 디자인 패턴을 구체화하였다. GoF의 디자인 패턴에는 생성 패턴 5개, 구조 패턴 7개, 행위 패턴 11개로 총 23개의 패턴으로 구성된다. 디자인 패턴을 사용하여 개발할 경우, 개발의 효율성, 유지보수성..
디자인 패턴 중 행위 패턴인 명령 패턴은 요구사항을 객체로 캡슐화하는 것이다. 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴으로 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 갖는다. 즉, 함수 호출 자체를 객체로 감싸 캡슐화 한 것이다. 함수 호출을 객체로 만들었기 때문에 디커플링으로 코드가 유연하며, redo(재실행), undo(실행 취소), 로깅, 입력키 변경 등과 같은 기능을 구현하는데 유용하다. 간단한 예시 리모컨을 제어하는 프로그램을 만든다고 가정할 때, 이 프로그램은 다양한 장치(에어컨, TV...)를 제어하는데 사용한다. class Device { public: virtua..
디자인 패턴 중 생성 패턴인 팩토리 패턴은 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나눌 수 있다. 1. 팩토리 메서드 패턴 팩토리 메서드 패턴은 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식으로 상위에서 인스턴스를 만드는 방법만 결정하고 하위에서 데이터 생성을 조작하는 함수들을 오버라이딩해서 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 디자인 패턴이다. 즉, 클래스의 인스턴스를 만드는 일을 하위 클래스에게 맡기는 것이다. 이 패턴은 객체를 생성하는 방식이나 생성하는 객체의 종류가 변해도 클라이언트 코드를 수정하지 않고 객체를 생성할 수 있게 한다. 간단한 예시 class Shape { public: virtual vo..