디자인 패턴 썸네일형 리스트형 [Design Pattern] 15. Flyweight Pattern(플라이웨이트 패턴) C# 공통된 속성을 가진 객체를 공유해 줘 RAM(리소스)를 절약할 수 있도록 도와주는 패턴입니다 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 유사한 객체가 많을 경우 많은 RAM을 절약할 수 있습니다. 단점 코드가 복잡해지며 타인이 코드를 볼 때 개체의 상태가 왜 그런 식으로 분리되었나 이해하지 못할 수 있습니다. 플라이웨이트 메서드를 호출할 때마다 콘텍스트 데이터를 계산해야 한다면 RAM을 덜 사용하는 대신 CPU에 부담을 주고있을 가능성이 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 로봇을 생산하고 Print를 통한 로봇의 이름 조회를 해보겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Flyweight (Project) |- P.. 더보기 [Design Pattern] 13. Pacade Pattern(퍼사드 패턴) C# 복잡한 여러 클래스들을 단순한 퍼사드 하나로 제공하여 간결하게 만드는 패턴입니다. 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 복잡한 하위 시스템을 간결하게 만들 수 있습니다. 단점 Facade 객체가 모든 걸 다하게 만들어 오히려 악효과가 날 수 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 컴퓨터 실행입니다. 각 프로세서, 램, 디스크를 만들어 컴퓨터를 실행 시키겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Memento (Project) |- Program.cs (Main) |- Processor.cs (Subsystem class) |- RAM.cs (Subsystem class) |- Disk.cs (Subsystem c.. 더보기 [Design Pattern] 12. Adapter Pattern(어댑터 패턴) C# 서로 다른 인터페이스를 변환하여 호환되지 않는 클래스와 작동할 수 있도록 도와주는 패턴입니다. 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 단일 책임 원칙을 만족하며 인터페이스 또는 데이터 변환 코드를 분리할 수 있습니다. 개방/폐쇄 원칙을 만족하며 인터페이스를 통해 어댑터와 작동한다면 기존의 코드를 변경하지 않고 새로운 어댑터를 추가할 수 있습니다. 단점 많은 새로운 인터페이스와 클래스를 만들어야 하므로 복잡성이 증가합니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 호환되지 않는 사각형(Legacy)을 어댑터에 넣고 Client에서 그려보도록 하겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Adapter(Project) |- Prog.. 더보기 [Design Pattern] 9. Visitor Pattern(방문자 패턴) C# 데이터의 구조와 그 데이터를 처리하는 객체를 분리하여 구현하는 패턴입니다. 행동 패턴(Behavioral Design Patterns)중 하나이죠. 장점 개방/폐쇄 원칙을 만족하여 다른 클래스를 변경하지 않으면서 클래스의 객체와 새로운 동작을 추가할 수 있습니다. 단일 책임 원칙을 만족하여 같은 행동의 여러 버전을 같은 클래스에 모을 수 있습니다. 방문자 객체는 다양한 객체들과 작업하면서 유용한 정보를 모을 수 있습니다. 따라서 복잡한 객체 구조(ex. 객체 트리)를 순회하여 각 객체에 방문자 패턴을 적용하려는 경우에 유용합니다. 단점 클래스가 계층구조에 추가되거나 제거될 때마다 모든 비지터를 업데이트해야 합니다. 방문자들은 작업해야 하는 요소가 비공개인 경우에 접근 권한이 부족할 수 있습니다. C#으로.. 더보기 [Design Pattern] 8. Tamplate Method Pattern(탬플릿 메소드 패턴) C# 일련의 동작을 하나로 묶고 필요한 부분만 자식 클래스에 위임하여 구현하는 패턴입니다. 행동 패턴(Behavioral Design Patterns)중 하나이죠. 장점 특정 부분만 오버라이드하여 다른 부분의 변경에 영향을 덜 받도록 할 수 있습니다. 중복 코드를 부모 클래스에 모을 수 있습니다. 단점 부모 클래스에 제공된 탬플릿에 의해 일부 구현이 제한될 수 있습니다. 자식 클래스를 통해 디폴트 단계 구현을 억제하여 리스코프 치환 원칙을 위반할 수 있습니다. 템플릿 메서드들은 단계들이 많아질수록 유지가 더 어려워집니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 Main에서 라는 변수를 통한 다양한 연산 결과를 출력입니다. 프로젝트의 tree구조는 아래와 같습니다. Template.. 더보기 [Design Pattern] 7. Command Pattern(명령 패턴) C# 동작하는 메소드를 클래스로 제작하여 캡슐화시킨 패턴입니다. 행동 패턴(Behavioral Design Patterns)중 하나이죠. 장점 런타임 중(실행 중)에 동적으로 사용되는 알고리즘을 변경할 수 있습니다. 단일/책임 원칙을 만족하며 작업을 호출하는 클래스(Invoker)와 작업을 수행하는 클래스(Receiver)를 분리 할 수 있습니다. 실행/취소를 구현할 수 있습니다. 개방/폐쇄 원칙을 만족하며 새로운 커맨드를 추가해 기능을 추가할 수 있습니다. 단점 Receiver와 Invoker사이에 있는 Command를 계속 추가하는 것이기에 코드가 더 복잡해질 수 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 매우 심플하게 만들 것이죠. 목표는 Main에서 "calculater".. 더보기 [Design Pattern] 6. Mediator Pattern(중재자 패턴) C# Mediator개체를 사용하여 다른 개체 간의 통신을 처리해 느슨한 결합을 도와주는 디자인 패턴입니다. M:N으로 통신을 해야 되거나, 개체 간의 복잡한 상호 작용을 관리하는 데 유용한 패턴입니다. 이 또한 행동 패턴(Behavioral Design Patterns)중 하나입니다. 장점 단일 책임 원칙을 족하여 다양한 개체 간의 통신을 한 곳으로 모아 우지 보수를 수월하게 만들 수 있습니다. 개방/폐쇄 원칙을 만족하며 기존 코드를 변경하지 않고 새 Mediator를 추가할 수 있습니다. 개체들을 재사용하기 수월해 집니다. 프로그램의 개체 간의 결합도를 줄일 수 있습니다. 단점 Mediator 객체가 복잡해지고 기능이 많아져 유지보수가 어렵게 될 수 있습니다. 이번 패턴도 역시 C#으로 Console 프로.. 더보기 [Design Pattern] 5. Observer Pattern(옵저버 패턴) C# 옵저버들을 객체에 등록하여 어떠한 이벤트가 있을 때마다 객체가 직접 목록의 각 옵저버에게 알리는 패턴입니다. 1:N으로 이벤트에 대한 정보를 넘길 수 있어 여러 상황에서 유용하게 쓰일 수 있습니다. 이 또한 행동 패턴(Behavioral Design Patterns)중 하나입니다. 장점 실행중(런타임)에서 객체간의 관계를 형성해줄 수 있습니다. 개방/폐쇄 원칙을 만족하며 기존 코드를 변경하지 않고 새 클래스(Subject, Observer)를 추가할 수 있습니다. 단점 Subject에 가입(Attach)한 옵저버들은 알림을 다받습니다. 이번 패턴도 역시 C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 간단하게 만들겠습니다. 목표는 Provider에 가입한 Moblie 또는 Cloud에게 어.. 더보기 이전 1 2 다음