2024. 10. 1. 00:32ㆍDesign Pattern
C# 디자인 패턴의 분류: 생성 패턴, 구조 패턴, 행위 패턴
디자인 패턴(Design Patterns)은 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위해 자주 사용되는 재사용 가능한 솔루션입니다. 디자인 패턴은 특정 문제를 해결하기 위한 일반적인 방법론을 제공하며, 코드의 유지보수성과 확장성을 높이고 재사용 가능성을 극대화합니다.
디자인 패턴은 크게 세 가지 분류로 나뉩니다:
- 생성 패턴(Creational Patterns)
- 구조 패턴(Structural Patterns)
- 행위 패턴(Behavioral Patterns)
각 분류는 다양한 패턴을 포함하고 있으며, 각각의 목적과 사용 사례가 다릅니다. 이 포스팅에서는 각 패턴의 개념과 중요성을 알아보겠습니다.
1. 생성 패턴 (Creational Patterns)
생성 패턴은 객체 생성과 관련된 문제를 해결하기 위한 패턴입니다.
객체 생성의 과정을 캡슐화하고, 객체를 생성할 때의 유연성을 높이며, 객체 생성을 제어할 수 있게 합니다.
이를 통해 코드를 보다 모듈화하고 확장 가능하게 만들 수 있습니다.
주요 생성 패턴:
- 싱글톤 패턴(Singleton Pattern): 클래스의 인스턴스를 하나만 생성하고, 그 인스턴스에 접근할 수 있도록 하는 패턴.
- 팩토리 메서드 패턴(Factory Method Pattern): 객체 생성 로직을 서브클래스에서 구현하도록 하여, 객체 생성을 유연하게 하는 패턴.
- 추상 팩토리 패턴(Abstract Factory Pattern): 관련 객체들의 그룹을 생성할 때 사용하는 패턴으로, 구체적인 클래스에 의존하지 않고 객체를 생성하는 방식.
- 빌더 패턴(Builder Pattern): 복잡한 객체를 단계별로 생성할 수 있도록 돕는 패턴.
- 프로토타입 패턴(Prototype Pattern): 기존 객체를 복사(cloning)하여 새로운 객체를 생성하는 패턴.
예시: 싱글톤 패턴
public class Singleton
{
private static Singleton _instance;
// 생성자를 private으로 설정하여 외부에서 생성 못하도록 제한
private Singleton() { }
public static Singleton Instance
{
get
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}
}
2. 구조 패턴 (Structural Patterns)
구조 패턴은 객체와 클래스 간의 구조적인 관계를 정의하고, 이러한 관계를 바탕으로 객체 간의 협력을 보다 효율적으로 관리할 수 있도록 돕는 패턴입니다. 객체의 구성을 재사용하거나 복잡한 구조를 단순하게 만들고, 객체 간의 의존성을 줄여줍니다.
주요 구조 패턴:
- 어댑터 패턴(Adapter Pattern): 인터페이스가 서로 맞지 않는 두 객체를 연결해주는 패턴.
- 데코레이터 패턴(Decorator Pattern): 객체에 동적으로 새로운 기능을 추가할 수 있는 패턴.
- 프록시 패턴(Proxy Pattern): 다른 객체에 대한 접근을 제어하기 위한 패턴.
- 퍼사드 패턴(Facade Pattern): 복잡한 서브시스템에 대한 간단한 인터페이스를 제공하는 패턴.
- 브리지 패턴(Bridge Pattern): 기능과 구현을 분리하여 독립적으로 확장할 수 있도록 하는 패턴.
- 컴포지트 패턴(Composite Pattern): 객체들을 트리 구조로 구성하여 부분과 전체를 동일하게 취급할 수 있도록 하는 패턴.
예시: 어댑터 패턴
public interface ITarget
{
void Request();
}
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("Specific Request");
}
}
public class Adapter : ITarget
{
private readonly Adaptee _adaptee;
public Adapter(Adaptee adaptee)
{
_adaptee = adaptee;
}
public void Request()
{
_adaptee.SpecificRequest();
}
}
3. 행위 패턴 (Behavioral Patterns)
행위 패턴은 객체나 클래스 사이에서 이루어지는 책임 분배와 의사소통 방법을 정의하는 패턴입니다.
객체 간의 상호작용을 관리하고, 행위를 조직화하거나 알고리즘을 객체들 간에 분배할 수 있도록 돕습니다.
주요 행위 패턴:
- 옵저버 패턴(Observer Pattern): 객체 상태 변화에 따라 다른 객체들에게 알림을 전달하는 패턴.
- 커맨드 패턴(Command Pattern): 요청을 객체로 캡슐화하여 서로 다른 요청을 매개변수화하고, 요청의 이력을 저장하거나 취소할 수 있는 패턴.
- 전략 패턴(Strategy Pattern): 여러 알고리즘을 캡슐화하여, 런타임에 알고리즘을 교체할 수 있도록 하는 패턴.
- 템플릿 메서드 패턴(Template Method Pattern): 알고리즘의 구조를 정의하고, 하위 클래스에서 특정 단계를 재정의할 수 있도록 하는 패턴.
- 상태 패턴(State Pattern): 객체의 상태에 따라 다른 행동을 하도록 하는 패턴.
예시: 옵저버 패턴
public interface IObserver
{
void Update(string message);
}
public class ConcreteObserver : IObserver
{
public void Update(string message)
{
Console.WriteLine($"Observer received: {message}");
}
}
public class Subject
{
private List<IObserver> observers = new List<IObserver>();
public void Attach(IObserver observer)
{
observers.Add(observer);
}
public void Notify(string message)
{
foreach (var observer in observers)
{
observer.Update(message);
}
}
}
디자인 패턴은 객체 생성, 구조 정의, 행위 조직화와 같은 소프트웨어 개발의 다양한 문제를 해결하기 위해 사용되는 재사용 가능한 방법론입니다. 이 패턴들은 코드의 유지보수성을 높이고, 시스템의 확장성과 유연성을 보장합니다. 각 패턴의 특성과 장점을 이해하고, 적절한 상황에서 사용하는 것이 중요합니다.
'Design Pattern' 카테고리의 다른 글
옵저버(Observer) 패턴 (5) | 2024.10.03 |
---|---|
Factory 패턴 및 추상 팩토리 패턴 (0) | 2024.10.02 |
SOLID 원칙: 객체 지향 설계의 5가지 핵심 원칙 (0) | 2024.10.01 |
의존성 주입(Dependency Injection) (0) | 2024.10.01 |
Singleton 패턴 (0) | 2024.09.20 |