Pattern 썸네일형 리스트형 [Design Pattern] 23. Builder Pattern(빌더 패턴) C# 복잡한 객체들을 단계별로 생성할 수 있도록 도와주는 디자인 패턴입니다. 생성 패턴(Creational Design Patterns) 중 하나입니다. 장점 객체들을 단계별로 생성하거나 생성 단계들을 연기하거나 재귀적으로 단계들을 실행할 수 있습니다. 제품들의 다양한 표현을 만들 때 같은 생성 코드를 재사용할 수 있습니다. 단일 책임 원칙을 만족하여 로직에서 복잡한 생성 코드를 분리시킬 수 있습니다. 단점 패턴이 여러 개의 새 클래스들을 생성해야 하므로 코드의 전반적인 복잡성이 증가합니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 이번엔 Person을 생성하고 정보를 입력하여 빌드하고 출력하겠습니다. 일단 프로젝트의 tree구조는 아래와 같습니다. Builder(Project) |- P.. 더보기 [Design Pattern] 22. Prototype Pattern(프로토타입 패턴) C# 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있도록 도와주는 디자인 패턴입니다. 생성 패턴(Creational Design Patterns) 중 하나입니다. 장점 객체들을 구상 클래스들에 결합하지 않고 복제할 수 있습니다. 초기화 코드를 대신 만들어진 프로토타입을 복제하 사용할 수 있습니다. 복잡한 객체들을 쉽게 생성할 수 있습니다. 사전 정보들을 처리할 때 상속 대신 사용할 수 있니다. 단점 순환 참조가 있는 복잡한 객체를 복제하는 경우 귀찮습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 이번엔 Animal과 Bottle을 생성하고 복제하겠습니다. 일단 프로젝트의 tree구조는 아래와 같습니다. Prototype(Project) |- Program.cs (Main) |- .. 더보기 [Design Pattern] 21. Abstract Factory Pattern(추상 팩토리 패턴) C# 어떠한 개체의 관련 객체들의 모음을 생성할 수 있도록 하는 디자인 패턴입니다. 생성 패턴(Creational Design Patterns) 중 하나입니다. 장점 팩토리에서 생성되는 제품들의 상호 호환을 보장할 수 있습니다. 생성되는 클래스들과 기존 코드 사이의 단단한 결합을 피할 수 있습니다. 단일 책임 원칙을 만족하며 생성 코드를 한 곳으로 모아 코드를 더 쉽게 유지보수할 수 있습니다. 개방/폐쇄 원칙을 만족하여 기존 코드를 변경하지 않고 새로운 객체들을 생성할 수 있습니다. 단점 패턴을 적용하기 위해 인터페이스들과 클래스들이 많이 추가되기 때문에 코드가 많이 복잡해질 수 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 이번엔 Pizza Factory에서 시카고 피자랑 뉴욕피자.. 더보기 [Design Pattern] 20. Factory Method Pattern(팩토리 메소드 패턴) C# 부모 클래스에서 객체를 생성할 수 있는 인터페이스를 제공나 자식 클래스가 생성될 객체들의 유형을 변경할 수 있도록 도와주는 디자인 패턴입니다. 생성 패턴(Creational Design Patterns) 중 하나입니다. 장점 생성하는 클래스와 생성된 클래스가 느슨한 결합을 유지할 수 있습니다. 단일 책임 원칙을 만족하여 생성하는 클래스의 코드를 프로그램의 한 위치로 이동하여 코드를 더 쉽게 유지관리할 수 있습니다. 개방/폐쇄 원칙을 만족하여 기존 코드를 변경하지 않고 새로운 유형의 클래스를 추가할 수 있습니다. 단점 가장 좋은 방법은 크리에이터 클래스들의 기존 계층구조에 패턴을 도입하는 것입니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 이번엔 AnimalFactory에서 Dog와 .. 더보기 [Design Pattern] 17. Composite Pattern(컴포지트 패턴) C# 객체의 계층 구조를 표현하고 개별 객체와 객체 그룹을 균일하게 처리해야 하는 상황을 도와주는 패턴입니다 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 다형성과 재귀를 사용해 복잡한 트리 구조들과 더 편리하게 작업할 수 있습니다. 개방/폐쇄 원칙을 만족하며 코드를 크게 변경하지 않고 새로운 요소를 추가할 수 있습니다. 단점 기능이 크게 다른 클래스들의 경우 공통 인터페이스를 제공하기 어려우며, 어떤 경우에는 컴포넌트 인터페이스를 과도하게 일반화해야 하여 이해하기 어렵게 만들 수 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 Circle, Square을 그려보겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Composite (Projec.. 더보기 [Design Pattern] 16. Proxy Pattern(프록시 패턴) C# 실제 개체와 사용자 사이에서 중개자와 같이 존재하고 실제 개체에 캐싱, 로깅같은 추가 기능을 사용할 수 있도록 도와주는 패턴입니다 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 서비스 객체가 로딩되지 않은 상태에서 서비스 객체를 제어할 수 있습니다. 개방/폐쇄 원칙을 만족하여 코드를 변경하지 않고도 새 프록시들을 도입할 수 있습니다. 신경 쓰지 않을 때 서비스 객체의 수명 주기를 관리할 수 있습니다. 단점 클래스가 많아져 코드가 복잡해질 수 있습니다. 프로그램의 응답이 늦어질 수 있습니다 C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 이미지를 디스플레이 해보겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Proxy (Project) |- Pro.. 더보기 [Design Pattern] 11. Memento Pattern(메멘토 패턴) C# 객체의 데이터에 대한 기록을 하고 이전 상태로 되돌리게 해주는 패턴입니다. 행동 패턴(Behavioral Design Patterns)중 하나이죠. 장점 캡슐화를 하고 객체의 상태의 스냅샷들을 저장할 수 있습니다. CareTaker가 Originator의 상태의 기록을 유지하도록 하여 Originator의 코드를 단순화 시킬 수 있습니다. 메멘토들을 자주 생성하면 앱이 많은 리소스를 사용할 수 있습니다. 단점 CareTaker가 사용하지 않는 메멘토들을 파괴할 수 있도록 Originator의 수명주기를 알아야 합니다. 대부분의 동적 프로그래밍 언어에서는 메멘토가 그대로 유지된다고 보장할 수 없습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 문자열을 넣었다가 이전 기록들을 출.. 더보기 이전 1 다음