일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- two pointer
- 다익스트라
- MYSQL
- Brute Force
- 스토어드 프로시저
- Dijkstra
- Hash
- Trie
- 이진탐색
- Stored Procedure
- union find
- DP
- String
- binary search
- SQL
- 그래프
- Two Points
- Today
- Total
목록소프트웨어 공학/디자인패턴 (5)
codingfarm

문제를 풀려고 자바를 썼는데 ProblemFactory를 얻었다. -철지난 JAVA 유머- 여기서는 두 개의 GOF 패턴, factory method와 abstract factory를 동시에 알아본다. 두 패턴은 서로 긴밀한 연관이 있다. 3.1 시나리오 2차원 직교좌표계의 좌표점 정보를 저장하려 할 경우, 아래와 같은 구현이 쉽게 떠올르것이다. 1 2 3 4 5 class Point{ public: float x, y; Point(const float x, const float y) : x{x}, y{y} {} }; Colored by Color Scripter cs 그렇다면 극 좌표계로 좌푯값을 저장해야 할 경우 어떻게 하면 될까? 아래처럼 극 좌표계용 생성자를 추가하면 어떨까?. 1 2 3 4 Po..

빌더 패턴(Builder Pattern)은 생성이 까다로운 객체를 쉽게 처리하기 위한 패턴이다. 즉, 생성자 호출 코드 단 한줄로 생성할 수 없는 객체를 다룬다. ex) 다른 객체들의 조합, 까다로운 로직이 필요한 객체들 이러한 객체들을 생성하는 코드는 따로 분리되어 관리될 필요가 있다. 2.1 시나리오 1 2 3 4 hello world cs 위와 같은 웹페이지를 그리기 위한 컴포넌트를 생성해야 한다고 하자. 단순하게 단어를 나타내는 항목 두개("hello"와 "world")를 html의 비순차("") 리스트("") 태그로 출력해보자. 1 2 3 4 5 6 7 string words[] = {"hello", "world"}; ostringstream oss; oss

C++에서 객체를 생성하는 것은 매우 까다롭다. 어느 메모리 영역? 스택할당 힙할당 어떤 포인터로? 일반 포인터 스마트포인터 객체의 생성방법은? native 코드로 생성 패턴으로 builder, factory 생성패턴 정의 : 까다로운 객체 생성 절차에 대한 어려움을 해소하는 디자인패턴 생성패턴에 대해 본격적으로 배우기 전 C++의 기본적인 부분을 알아야 한다. 스택(stack) 할당 스택 메모리를 할당받아 객체를 생성하면 stack에 할당됨 scope를 벗어날 때 자동으로 소멸되며 소멸자가 호출됨 힙(heap) 할당 원시 포인터를 이용하여 동적 할당을 통해 객체를 생성하면 heap에 할당됨 scope를 벗어나도 소멸되지 않는다. 메모리 해제를 비롯한 뒷정리에 대해 불분명한 문제가 생긴다. 스마트 포인터..

3.리스코프 치환 원칙(LisCov Substitution Principle, LSP) 어떤 자식 개체에 접근할 때 그 부모 객체의 인터페이스로 접근하더라도 아무런 문제가 없어야 한다. LSP가 준수되지 않는경우 아래는 직사각형 클래스 이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Rectangle { protected: int width, height; public: Rectangle(const int width, const int height) : width(width), height(height) {} int get_width() const { return width; } virtual void set_width(const int width) { this->width ..

SOLID는 다음과 같은 디자인 원칙들을 아우르는 약어이다. 단일 책임 원칙(Single Responsibility Principle, SRP) 열림-닫힘 원칙(Open-Closed Principle, OCP) 리스코프 치환 원칙(Liscov Substitution Principle, LSP) 인터페이스 분리 원칙(Interface Segregation Principle, ISP) 의존성 역전 원칙(Dependenc Inversion Principle, DIP) 이 5가지 원칙은 디자인 패턴의 존재 이유에 전반적으로 녹아들어가 있다. 1. 단일 책임 원칙(Single Responsibilty Principle, SRP) 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함 클래스..