[c#] 디자인 패턴 적용

C#은 강력한 객체 지향 프로그래밍 언어로, 디자인 패턴을 적용하여 코드의 유연성과 유지 보수성을 향상시킬 수 있습니다. 이러한 디자인 패턴은 코드 재사용, 가독성, 유연성을 높여줄 뿐만 아니라, 개발자 간의 코드 이해도를 증가시킬 수 있습니다. 아래에서는 몇 가지 일반적인 C# 디자인 패턴에 대해 알아보겠습니다.

1. 싱글톤(Singleton) 패턴

싱글톤 패턴은 어플리케이션 전역에서 오직 한 개의 인스턴스만을 가지도록 하는 패턴입니다. 이를 통해 설정 정보나 로깅 등 어플리케이션 전역에서 사용되는 객체의 중복 생성을 방지할 수 있습니다. C#에서는 싱글톤 패턴을 구현하기 위해 **정적 멤버 또는 Lazy를 활용**하는 방법이 주로 사용됩니다.

아래는 싱글톤 패턴을 C#으로 구현한 예시코드 입니다.

public class Singleton
{
    private static Singleton _instance;
    private static readonly object _lock = new object();

    private Singleton() { }

    public static Singleton GetInstance()
    {
        lock (_lock)
        {
            if (_instance == null)
            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }
}

2. 팩토리(Factory) 패턴

팩토리 패턴은 객체 생성을 캡슐화하는 패턴으로, 클라이언트 코드가 직접 객체를 생성하는 대신 객체 생성 로직을 팩토리에 위임함으로써 유연성을 제공합니다. C#에서는 팩토리 패턴을 구현하기 위해 인터페이스, 추상 클래스 또는 가상 생성자 메서드를 활용할 수 있습니다.

아래는 간단한 팩토리 패턴을 C#으로 구현한 예시코드 입니다.

public interface IProduct
{
    void Ship();
}

public class ConcreteProduct1 : IProduct
{
    public void Ship()
    {
        Console.WriteLine("Shipping ConcreteProduct1");
    }
}

public class ConcreteProduct2 : IProduct
{
    public void Ship()
    {
        Console.WriteLine("Shipping ConcreteProduct2");
    }
}

public class ProductFactory
{
    public IProduct GetProduct(string type)
    {
        switch (type)
        {
            case "1":
                return new ConcreteProduct1();
            case "2":
                return new ConcreteProduct2();
            default:
                throw new ArgumentException("Invalid type");
        }
    }
}

결론

C#에서 디자인 패턴을 적용하는 것은 코드의 유연성과 확장성을 향상시킬 수 있는 중요한 요소입니다. 본문에서는 싱글톤과 팩토리 패턴을 예시로 들었지만, 다양한 디자인 패턴을 활용하여 개발을 진행할 수 있습니다. 유사한 상황에서 같은 문제를 해결해야 할 때마다, 디자인 패턴을 활용하여 일관성 있는 코드를 작성하는 것이 좋습니다.

디자인 패턴에 대해 더 알고 싶다면, Gang of Four의 “Design Patterns: Elements of Reusable Object-Oriented Software” 책을 참고하시기 바랍니다.