반응형

소프트웨어 설계 73

[C#] 복합체 패턴(Composite Pattern) - 개요, 시나리오

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

[C#] 가교 패턴(Bridge Pattern) - 개요, 시나리오

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

[C#] 적응자 패턴(Adapter Pattern) - 개요, 시나리오

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

[C#] 단일체 패턴(Singleton Pattern) - 개요, 시나리오

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

[소프트웨어 설계 패턴 C#] 12. 프락시 패턴(Proxy Pattern) - 원격지 프락시

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 프락시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴입니다. 프락시 패턴은 사용하는 목적과 방법에 따라 원격지 프락시와 가상 프락시, 보호용 프락시, 스마트 참조자로 구분할 수 있습니다. 원격지 프락시는 사용할 실제 개체가 클라이언트와 다른 위치에 있을 때 원격지에 있는 개체처럼 사용할 수 있는 프락시를 말합니다. 가상 프락시는 사용할 실제 개체의 특정 행위가 많은 시간이 들 때 비 동기적으로 수행할 수 있게하여 사용자가 작업이 완료되는 것을 기다리지 않게 해 주는 프락시입니다. 보호용 프락시는 개체의 기능을 권한에 따라 사용하는 수준을 다르게 해 주는 프락시입니다. 스마트 참조자는 여러 곳에서 사용하는 개체가 있다면 실제 개체를 ..

Escort GoF의 디자인 패턴 C#

Escort GoF의 디자인 패턴 C# 책 소개 이 책은 소프트웨어 제작 시 자주 사용되는 디자인(설계) 패턴(유형)을 소개하고 C#언어로 기술하였습니다. 소프트웨어 설계에 관한 책으로 [GoF의 디자인 패턴]은 많은 개발자에게 명서로 알려졌습니다. 하지만 충분한 지식과 경험이 없는 상태에서 보는 것은 너무나 힘들다고 얘기합니다. 이 책에서는 GoF의 디자인 패턴에 소개된 23가지 디자인 패턴을 설명과 시나리오, 클래스 다이어그램, 구체적인 구현까지 다루고 있습니다. 이를 통해 어떠한 디자인 패턴이 어떻게 사용하면 좋은지를 판단하고 실제 프로그래밍에서 효과적인 설계를 할 수 있게 도와줄 것입니다. 정확한 설명으로 디자인 패턴을 설명하면 충분한 사전 지식과 경험이 있는 이들은 명확하게 알 수 있습니다. 하..

Escort GoF의 디자인 패턴

Escort GoF의 디자인 패턴 책 소개이 책은 소프트웨어 제작 시 자주 사용되는 디자인(설계) 패턴(유형)에 대해 다루고 있습니다. 소프트웨어 설계에 관한 책으로 [GoF의 디자인 패턴]은 많은 개발자에게 명서로 알려졌습니다. 하지만 충분한 지식과 경험이 없는 상태에서 보는 것은 너무나 힘들다고 얘기합니다. 이 책에서는 GoF의 디자인 패턴에 소개된 23가지 디자인 패턴을 설명과 시나리오, 클래스 다이어그램, 구체적인 구현까지 다루고 있습니다. 이를 통해 어떠한 디자인 패턴이 어떻게 사용하면 좋은지를 판단하고 실제 프로그래밍에서 효과적인 설계를 할 수 있게 도와줄 것입니다.정확한 설명으로 디자인 패턴을 설명하면 충분한 사전 지식과 경험이 있는 이들은 명확하게 알 수 있습니다. 하지만 충분한 사전 지식..

26. 방문자 패턴(Visitor Pattern) [Escort GoF의 디자인 패턴]

26. 방문자 패턴(Visitor Pattern) 26.1 개요 프로그래밍하다 보면 여러 구성 요소로 구성된 개체를 정의해야 하는 경우는 매우 흔한 일입니다. 그리고 특정 명령을 수행함에 있어 내부 구성 요소 개체들의 형식에 따라 적용해야 할 구체적 행위가 다른 경우가 있습니다. 이 경우에 방문자 패턴을 사용하면 개체들의 형식에 따라 적용해야 할 구체적 행위를 분리하여 정의할 수 있습니다. 이는 새로운 행위를 정의할 필요가 생길 경우에도 구성 요소 형식을 변경하지 않으면서 추가할 수 있게 됩니다. 방문자 패턴에서는 개체를 구성하는 여러 요소 개체들에게 요소의 형식에 따라 수행할 구체적 작업을 방문자에 정의하게 됩니다. 대신 요소의 형식에서는 방문자를 수용하는 메서드를 제공하고 방문자를 통해 자신을 제어하..

25. 템플릿 메서드 패턴(Template Method Pattern) [Escort GoF의 디자인 패턴]

25. 템플릿 메서드 패턴(Template Method Pattern) 25.1 개요 템플릿 메서드 패턴은 특정 연산을 수행하는 단계별로 수행해야 할 행위에 대한 약속을 기반 클래스에서 정의하고 각 단계별로 수행하는 구체적 구현은 파생 클래스에서 재정의하는 형태의 패턴입니다. 비슷한 형태의 프로그램을 작성에 필요한 뼈대를 일반화하여 제공하는 것은 실무에서 자주 사용하는 기법입니다. 일반화 과정을 통해 작성된 뼈대가 마련되어 있다면 실제 프로그래밍할 때에는 이를 기반으로 세부적인 기능만 재정의를 하여 효과적으로 프로그래밍할 수 있습니다. 그리고 설계 단계에서 뼈대에 대한 부분을 고민하지 않아도 되어 비용을 줄일 수 있고 기술 노하우를 축적할 수 있게 해 줍니다. 이를 위해서 템플릿 메서드 패턴에서는 특정 ..

24. 전략 패턴(Strategy Pattern) [Escort GoF의 디자인 패턴]

24. 전략 패턴(Strategy Pattern) 24.1 개요 프로그래밍하다 보면 같은 문제를 해결하는 여러 가지 방법 중에 무엇을 사용하는 것이 효과적인지 고민을 하는 경우가 많습니다. 어떤 때에는 일단은 효율이 떨어져도 개발 비용이 적게 드는 방법으로 해결을 하고 차후에 개선된 알고리즘을 사용하여 교체를 하는 방법을 사용하기도 합니다. 이 경우에 알고리즘에 대한 추상화를 통해 전략 패턴을 적용하면 효과적으로 작업을 진행할 수 있습니다. 전략 패턴은 동일한 문제를 해결하기 위한 여러 알고리즘을 일반화하여 사용하는 부분에서 특정 알고리즘에 종속적이지 않고 독립적으로 사용할 수 있게 하는 패턴입니다. 전략 패턴에서는 구체적으로 어떠한 방법으로 문제를 해결해야 할 지를 결정하지 못한 경우에 해당 부분만을 ..

반응형