반응형

C++ 소스 코드 62

9. 장식자 패턴(Decorator Pattern) [Escort GoF의 디자인 패턴]

9. 장식자 패턴(Decorator Pattern) 9.1 개요 프로그래밍하다 보면 너무 다양한 형태로 기능을 확장해야 할 경우가 발생합니다. 예를 들면 여러 종류의 단위 기능이 있고 이들을 조합해서 사용할 경우입니다. 사진에 원 장식을 하고 여기에 사각형 장식을 하고 여기에 삼각형 장식을 하는 등의 작업을 반복할 수 있는 경우처럼 말이죠. 이 같은 경우에 단위 기능들에 대한 조합된 기능을 수행할 수 있는 개체 형식들을 정의하기 위해서는 무수히 많은 수의 파생 클래스를 정의해야 합니다. 이때 장식자 패턴을 사용하면 장식자 개체에서 필요한 단위 기능을 하는 형식 개체를 포함을 시키는 것으로 이를 해결할 수 있습니다. 이 같은 경우에 장식자 패턴은 단위 기능을 수행하는 형식과 장식자 형식을 정의하고 일반화하..

8. 복합체 패턴(Composite Pattern) [Escort GoF의 디자인 패턴]

8. 복합체 패턴(Composite Pattern) 8.1 개요 복합체 패턴은 복합 개체와 단일 개체를 같은 방법으로 사용하고자 할 때 사용되는 패턴입니다. 복합체 패턴은 트리 구조로 관리고자 할 때 자주 사용이 됩니다. 예로 폴더(복합 개체)와 파일(단일 개체)을 같은 방법으로 사용하게 하는 것이죠. 이처럼 복합체 패턴에서는 단일 개체와 복합 개체를 같은 방법으로 사용할 수 있게 일반화하여 기반 클래스를 제공합니다. 단일 개체 형식과 복합 개체 형식은 파생된 클래스로 구현하겠죠. 중요한 것은 기반 클래스에서 단일 개체와 복합 개체에서 할 수 있는 모든 기능을 인터페이스로 약속한다는 점에 있습니다. 이를 통해 사용자는 해당 개체가 단일 개체인지 복합 개체인지를 모르더라도 같은 방법으로 사용할 수 있는 것..

7. 가교 패턴(Bridge Pattern) [Escort GoF의 디자인 패턴]

7. 가교 패턴(Bridge Pattern) 7.1 개요 가교 패턴은 추상적 개념과 구체적 구현 사이의 종속성을 제거하여 목적에 맞게 다양한 구현 방법을 사용하도록 제공하는 패턴입니다. 프로그램하다 보면 일반화 관계로 설계하였을 때 기반 클래스에서 파생하는 클래스가 너무 많아지는 경우가 발생합니다. 그리고 다시 파생 클래스를 기반으로 하는 파생 클래스가 많아지는 경우도 발생하지요. 예를 들어, 사람이라는 기반 클래스가 있다고 가정합시다. 그리고 사람에서 파생한 학생과 학부모, 강사 등이 있습니다. 학생 중에는 피아노를 칠 수 있는 학생과 야구를 할 줄 아는 학생, 피아노와 야구를 할 줄 하는 학생 등이 있을 수 있겠죠. 학부모와 강사도 마찬가지일 것입니다. 이를 일반화 관계로 표현하다 보면 파생되는 계층..

6. 적응자 패턴(Adapter Pattern) [Escort GoF의 디자인 패턴]

6. 적응자 패턴(Adapter Pattern) 6.1 개요 적응자 패턴은 서로 비슷한 기능을 하지만 사용 방법이 다른 경우 같은 인터페이스를 갖게 변환시키는 패턴입니다. 변환시키기 전에는 서로 다른 방법으로 사용해야 했던 작업들을 일관된 인터페이스를 사용할 수 있어 사용이 쉬워집니다. 적응자 패턴은 사용자에게 익숙한 인터페이스 형태로 포장하여 제공한다는 의미에서 래퍼(Wrapper)라고도 부릅니다. 6. 2 시나리오 어느 날 강의를 하고 있는데 이 매핑 씨에게 전화가 왔습니다. "안녕하세요. 혁재 아버지!" "네, 잘 지내시죠. 그런데 어떤 일로 저에게…" "저희가 이번에 새로운 모듈을 개발했거든요. 그런데 개발하는 과정에서 기존 모듈과 사용 방법이 다르게 만들게 되었어요. 개발을 완료해서 보니 모듈이..

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

반응형