반응형

전체 글 2934

5. 단일체 패턴(Singleton Pattern) [Escort GoF의 디자인 패턴]

5. 단일체 패턴(Singleton Pattern) 5.1 개요 단일체 패턴은 프로그램에서 특정 형식의 개체가 유일함을 보장하는 패턴을 말합니다. 일반적으로 데이터들을 관리하고 운용하는 개체를 하나만 두어 관리의 집중화를 통해 유지 보수 비용을 줄이고 높은 신뢰성을 부여할 수 있게 됩니다. 사용자와 상호작용을 하는 프로그램을 작성할 때 단일체 패턴은 유용하게 사용될 수 있습니다. 사용자와 상호 작용을 담당하는 개체는 주요 데이터를 관리하는 단일 개체에게 사용자의 명령을 전달하는 역할을 합니다. 그리고 사용자에게 보여줄 정보들도 단일 개체를 통해 얻어오게 프로그래밍을 할 수 있습니다. 이처럼 프로그래밍하면 사용자와 상호 작용하는 부분을 목적에 따라 다양한 형태의 뷰를 제작할 수 있습니다. 또한, 필요에 따..

4. 원형 패턴(Prototype Pattern) [Escort GoF의 디자인 패턴]

4. 원형 패턴(Prototype Pattern) 4.1 개요 원형 패턴은 미리 만들어진 개체를 복사하여 개체를 생성하는 패턴을 말합니다. 그리고 이때 미리 만들어진 개체를 원형 개체라 부릅니다. 일반화 관계로 표현할 때 파생 클래스의 개수가 과도히 많아지고 각 클래스의 메서드에서 수행하는 알고리즘에 차이가 없으면서 생성 시에 개체의 속성 값만 다르다면 원형 패턴을 사용하는 것이 효과적입니다. 4. 2 시나리오 다음 주에는 거제도와 통영으로 2박 3일 여행을 가기로 하였습니다. 이번 기회에 괜찮은 줌 렌즈를 하나 구매하려고 EHLand 쇼핑몰을 검색해 보았습니다. EHLand 쇼핑몰에는 다양한 형태의 줌 렌즈들이 있는데 이들 중에 무엇을 사는 것이 좋은지 생각하다 보니 어떠한 원리로 만들어져 있는지 궁금..

3. 팩토리 메서드 패턴(Factory Method Pattern) [Escort GoF의 디자인 패턴]

3. 팩토리 메서드 패턴(Factory Method Pattern) 3.1 개요 프로그래밍하다 보면 같은 방법으로 사용할 수 있는 여러 종류의 개체를 일반화하여 기반 클래스를 정의하고 이를 기반으로 파생 클래스로 정의하는 것은 매우 흔합니다. 이 경우에 사용하는 곳에서 구체적으로 어떠한 개체를 생성해서 사용할 지에 대하여 개발 초기 단계에서 결정할 수 없다면 어떻게 하면 좋을까요? 팩토리 메서드 패턴을 이용하면 이러한 고민을 해결할 수 있습니다. 추상 팩토리 클래스에서는 사용할 개체(추상 클래스)를 생성하는 것에 대해 약속만 합니다. 대신 파생 팩토리 클래스에서 구체적으로 어떠한 개체를 생성할 것인지 구현합니다. 이처럼 구체적인 개체를 생성하는 부분을 분리하면 추상 팩토리 클래스에서는 어떠한 개체를 생성..

2. 빌더 패턴(Builder Pattern) [Escort GoF의 디자인 패턴]

2. 빌더 패턴(Builder Pattern) 2.1 개요 프로그래밍하다 보면 여러 요소로 구성되는 개체가 있습니다. 그리고 이와 같은 개체를 생성하는 방법이 목적에 따라 다양한 경우가 생깁니다. 이 경우에 빌더 패턴은 목적에 따른 개체를 생성하는 과정에 대한 약속과 각 과정에서 수행할 구체적인 알고리즘을 분리하여 개체를 생성하는 패턴입니다. 빌더 패턴에서 빌더는 추상 클래스로 개체를 생성하는 과정들을 약속합니다. 빌더를 기반으로 파생한 클래스에서는 생성 과정들에 대해 구체적으로 구현합니다. 이처럼 정의하면 빌더를 사용하는 곳에서는 서로 다른 구조를 갖는 개체를 같은 방법으로 생성할 수 있습니다. 2. 2 시나리오 우리 가족은 매주 토요일에는 여행을 갑니다. 여러분도 아시다시피 우리 가족은 사진을 찍는 ..

1. 추상 팩토리 패턴 (Abstract Factory Pattern) [Escort GoF의 디자인 패턴]

1. 추상 팩토리 패턴 (Abstract Factory Pattern) 1.1 개요 프로그래밍하다 보면 특정 목적에 따라 사용해야 하는 개체들이 서로 호환성이 있어야 하는 경우가 발생합니다. 목적에 따라 사용해야 하는 개체군이 다른 경우에 특정 목적에 맞게 호환성 있는 개체가 무엇인지를 조사하고 주의 깊게 사용하는 비용이 발생합니다. 이럴 때 추상 팩토리 패턴을 사용하면 효과적으로 비용을 줄일 수 있습니다. 특히, 특정 작업을 구현할 때 호환성이 있는 여러 개체를 사용해야 한다면 추상 팩토리 패턴을 사용하세요. 추상 팩토리 패턴을 사용하면 표준화된 방식에 의해 자신에게 맞는 개체군을 효과적으로 이용할 수 있게 해 줍니다. 추상 팩토리 패턴에서는 서로 호환성 있는 개체들을 생성하는 부분만 담당하는 개체를 ..

9.4 병합 정렬(Merge Sort) [디딤돌 자료구조와 알고리즘 with C++]

9.4 병합 정렬(Merge Sort)이제 병합 정렬 알고리즘을 살펴보기로 해요. 병합 정렬은 배열을 분할한 후에 분할한 배열끼리 정렬하는 것을 반복하여 전체를 정렬하는 알고리즘입니다. 이처럼 커다란 문제를 작은 문제로 분할하고 분할한 작은 영역의 문제를 해결하면서 커다란 문제를 해결하는 알고리즘을 분할 정복(Divide And Conquer) 알고리즘이라고 말합니다. 먼저 분할하는 과정이 필요합니다. 분할하다가 원소의 개수가 1보다 작거나 같으면 분할은 끝납니다.조건(n

9.3 수식 파서 트리(Numeric Parser Tree) [디딤돌 자료구조와 알고리즘 with C++]

9.3 수식 파서 트리(Numeric Parser Tree)수식 계산기는 스택으로 만드는 방법과 파서 트리로 만드는 방법이 있습니다. 정규화를 할 수 있는 구문을 파싱(Parsing)할 때 파서 트리로 구현하면 운행 방법에 따라 원하는 결과물을 얻을 수 있습니다. 이번에는 컴파일러 개념을 도입한 수식 파서 트리를 만들어 보기로 할게요. 파서(Parser)는 파싱하는 도구를 말합니다. 그리고 파싱은 입력 문장을 분석하는 것을 말합니다. 따라서 파서는 입력 문장을 분석하여 원하는 결과물을 만드는 번역기라 할 수 있습니다. 컴파일러도 고급 언어로 작성한 소스를 분석하여 기계어로 번역하므로 내부에 파싱하는 파서가 필요합니다. 컴파일러가 컴파일하는 과정은 여러 단계로 나누며 컴파일러 종류에 따라 다릅니다. 여기에..

9.2 스택을 이용한 수식 파서 [디딤돌 자료구조와 알고리즘 with C++]

9.2 스택을 이용한 수식 파서수학에서 수식은 피연산자 사이에 연산 기호를 표기하는데 이를 중위 표기라 얘기합니다. 그런데 컴퓨터 프로그램에서 중위 표기의 수식을 계산할 때 순차적으로 수행하면 수학에서의 연산 결과가 다르게 나옵니다. 예를 들어 2+3*5의 연산은 +연산보다 *연산을 먼저하기 때문에 17이지만 순서대로 연산을 수행하면 2+3을 수행한 후에 5*5를 수행해서 25가 나옵니다. 컴퓨터 프로그램에서 제대로 수식을 계산하기 위해서는 우선 순위에 맞게 연산의 순서를 파악한 후에 계산해야 합니다. 수식을 연산 순서에 맞게 표현하는 방법 중에 연산 기호의 자식으로 피연산자를 도식하는 수식 파서 트리를 이용해서 설명해 볼게요. 2+3*5 수식에서 +연산의 피연산자는 2와 3*5의 연산 결과입니다. 그리..

9.1 힙 정렬 알고리즘 [디딤돌 자료구조와 알고리즘 with C++]

9.1 힙 정렬 알고리즘이제 힙 정렬 알고리즘을 살펴보기로 해요. 힙 정렬은 완전 이진 트리의 한 종류인 힙 트리를 이용하여 정렬하는 알고리즘입니다. 먼저 힙 트리가 무엇인지 살펴본 후에 힙 정렬 알고리즘을 알아보고 분석 및 구현해 봅시다. 힙 트리는 부모의 값이 자식의 값보다 큰 값을 보장하는 최대 힙과 작은 값을 보장하는 최소 힙이 있습니다. 최대 힙으로 표현한 힙 트리의 루트에는 가장 큰 값을 갖고 최소 힙으로 표현하면 가장 작은 값을 갖습니다. 힙 트리처럼 완전 이진 트리는 배열로 많이 표현합니다. 완전 이진 트리가 아닌 이진 트리도 배열로 표현할 수 있지만 트리의 높이가 높아지고 한 쪽으로 기울어질 수록 비어있는 공간이 많아져서 메모리 효율이 떨어집니다. 하지만 완전 이진 트리는 마지막 자료가 ..

9. 기타 이진 트리 및 분할 정복 [디딤돌 자료구조와 알고리즘 with C++]

9. 기타 이진 트리 및 분할 정복 이번에는 기타 이진 트리와 분할 정복에 관해 알아봅시다. 트리는 용도에 따라 매우 다양한 형태를 지닙니다. 여기에서는 힙 정렬 알고리즘을 소개하면서 힙 트리를 다루고 수식 계산기에 사용하는 수식 파서 트리를 살펴볼게요. 그리고 문제를 분할한 후에 작은 문제를 해결하는 과정을 통해 전체 문제를 정복해 나가는 병합 정렬 알고리즘을 살펴볼 거예요. 병합 정렬 알고리즘에서 정렬할 배열을 분리하는 부분은 재귀적인 방법을 사용할 수 있어 분할 정복 알고리즘은 재귀 알고리즘으로 분류할 수 있습니다. 힙 트리는 완전 이진 트리로 노드를 이용하여 구현하는 것보다 배열을 이용하여 구현하는 것이 효과적입니다. 여기서는 자신의 부모 인덱스와 자식 인덱스를 계산할 수 있어야 하는데 이들에 대..

반응형