본문 바로가기

최적화

[Design Pattern] 24. Interpreter Pattern(인터프리터 패턴) C# 자신의 문법을 정의하고 인터프리터 객체를 사용하여 문법을 분석하여 출력하는 디자인 패턴입니다. 행동 패턴(Behavioral Design Patterns) 중 하나입니다. 장점 새로운 표현(문법)을 추가할 수 있기 때문에 확장 및 수정이 수월할 있습니다. 언어 또는 문법을 개체 지향 트리 구조로 나타낼 수 있으므로 이해 및 유지 관리가 더 쉬워집니다. 언어나 문법에 따라 작동하는 복잡한 규칙이나 알고리즘을 더 쉽게 구현할 수 있습니다. 단점 복잡한 언어나 문법의 경우 구현하기가 복잡할 수 있습니다. 언어나 문법을 나타내는 트리 구조를 생성해야 하므로 다른 방식보다 안좋 수 있습니다. 트리 구조의 다양한 곳에서 오류가 발생할 수 있으므로 디버깅하기 어려울 수 있습니다. C#으로 Console 프로젝트를 하.. 더보기
[Design Pattern] 23. Builder Pattern(빌더 패턴) C# 복잡한 객체들을 단계별로 생성할 수 있도록 도와주는 디자인 패턴입니다. 생성 패턴(Creational Design Patterns) 중 하나입니다. 장점 객체들을 단계별로 생성하거나 생성 단계들을 연기하거나 재귀적으로 단계들을 실행할 수 있습니다. 제품들의 다양한 표현을 만들 때 같은 생성 코드를 재사용할 수 있습니다. 단일 책임 원칙을 만족하여 로직에서 복잡한 생성 코드를 분리시킬 수 있습니다. 단점 패턴이 여러 개의 새 클래스들을 생성해야 하므로 코드의 전반적인 복잡성이 증가합니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 이번엔 Person을 생성하고 정보를 입력하여 빌드하고 출력하겠습니다. 일단 프로젝트의 tree구조는 아래와 같습니다. Builder(Project) |- P.. 더보기
[Design Pattern] 19. Singleton Pattern(싱글톤 패턴) C# 클래스에 인스턴스가 하나만 있도록 하면서 전역 접근을 도와주는 디자인 패턴입니다. 생성 패턴(Creational Design Patterns) 중 하나입니다. 장점 클래스가 하나의 인스턴트만 갖습니다. 전역에서 동일한 객체 접근이 가능합니다. 처음에만 초기화 됩니다.. 단점 단일 책임 원칙을 위반하여 한 번에 여러 문제를 동시에 해결합니다. 코드가 꼬일 수 있습니다. Thread-Safety하지 않을 수 있습니다. 유닛 테스트 하기 힘듭니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 이번엔 생성 패턴에 싱글톤이라 뭐가 많이 없습니다. 일단 프로젝트의 tree구조는 아래와 같습니다. Singleton (Project) |- Program.cs (Main) |- Singleton.cs .. 더보기
[Design Pattern] 18. Decorator Pattern(데코레이터 패턴) C# 객체의 계층 구조를 표현하고 개별 객체와 객체 그룹을 균일하게 처리해야 하는 상황을 도와주는 패턴입니다 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시키는 구조적 디자인 패턴 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 객체를 여러 데코레이터로 래핑하여 여러 행동들을 합성할 수 있습니다. 실행 중 객체들에서부터 책임들을 추가하거나 제거할 수 있습니다. 새 자식 클래스를 만들지 않고도 객체의 행동을 확장할 수 있습니다. 단일 책임 원칙을 만족하며 다양한 행동들의 여러 변형들을 구현하는 모놀리식 클래스를 여러 개의 작은 클래스들로 나눌 수 있습니다. 단점 계층들의 초기 설정 코드가 보기 힘들 수 있습니다. 데코레이터의 행동이 데코레이터.. 더보기
[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] 15. Flyweight Pattern(플라이웨이트 패턴) C# 공통된 속성을 가진 객체를 공유해 줘 RAM(리소스)를 절약할 수 있도록 도와주는 패턴입니다 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 유사한 객체가 많을 경우 많은 RAM을 절약할 수 있습니다. 단점 코드가 복잡해지며 타인이 코드를 볼 때 개체의 상태가 왜 그런 식으로 분리되었나 이해하지 못할 수 있습니다. 플라이웨이트 메서드를 호출할 때마다 콘텍스트 데이터를 계산해야 한다면 RAM을 덜 사용하는 대신 CPU에 부담을 주고있을 가능성이 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 로봇을 생산하고 Print를 통한 로봇의 이름 조회를 해보겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Flyweight (Project) |- P.. 더보기
[Design Pattern] 14. Bridge Pattern(브릿지 패턴) C# 인터페이스를 구현과 분리하여 독립적으로 변경할 수 있도록 도와주는 패턴입니다 구조 패턴(Structural Design Patterns)중 하나이죠. 장점 플랫폼 독립적인 클래스들과 앱들을 만들 수 있습니다. 상위 수준의 추상화를 통해 작동하며, 세부 정보에 노출되지 않습니다. 개방/폐쇄 원칙을 만족하여 추상화와 구현들을 상호 독립적으로 추가할 수 있습니다. 단일 책임 원칙을 만족하여 추상화된 인터페이스와 세부 정보 구현에 집중할 수 있습니다. 단점 결합도가 높은 경우에 적용하여 더 복잡하게 만들 수 있습니다. C#으로 Console 프로젝트를 하나 생성해서 할 것입니다. 목표는 이메일, SMS로 메세지를 보내겠습니다. 프로젝트의 tree구조는 아래와 같습니다. Bridge (Project) |- Pro.. 더보기