Humility

아무리 노력해도 최고가 되지 못할 수 있다⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀그럼에도 노력하는자가 가장 겸손한 것 아닌가

공부하는 블로그

유니티/디자인패턴

[Unity] 유니티 C#) 디자인 패턴이란?

새벽_글쓴이 2024. 11. 28. 11:20
반응형

디자인 패턴

소프트웨어 개발과정에서 자주 발생하는 문제들에 대한 일반적인 해결책

건축가들이 사용하는 기본 설계도와 비슷한 개념이다

 

핵심 구성요소

문제 상황 - 패턴이 해결하려는 반복적으로 발생하는 문제
해결책 - 그 문제를 해결하기 위한 설계 방법
결과 - 해결책을 적용했을 때의 장단점

 

디자인 패턴의 종류

크게 3가지 종류로 분류된다

 

1. 생성 패턴 (Creational Patterns)

  • 객체 생성과 관련된 패턴
  • 예: 싱글톤, 팩토리, 빌더, 프로토타입
  • 사용 예시: 게임에서 몬스터를 생성할 때 팩토리 패턴 사용

 

2. 구조 패턴 (Structural Patterns)

  • 클래스와 객체를 더 큰 구조로 조합하는 패턴
  • 예: 어댑터, 브리지, 컴포지트, 데코레이터
  • 사용 예시: 게임 캐릭터의 장비 시스템에 데코레이터 패턴 사용

 

3. 행위 패턴 (Behavioral Patterns)

  • 객체들 간의 상호작용과 책임 분배를 다루는 패턴
  • 예: 옵저버, 전략, 커맨드, 상태
  • 사용 예시: 게임의 성과 시스템에 옵저버 패턴 사용

 

디자인 패턴의 장점

검증된 해결책 제공
코드 재사용성 향상
팀원 간 의사소통 개선
유지보수 용이성 증가

 

주의할 점

패턴을 위한 패턴 사용은 피해야 함
상황에 맞는 적절한 패턴 선택이 중요
때로는 간단한 해결책이 더 나을 수 있음
패턴을 변형해서 사용하는 것도 가능

 

디자인 패턴의 구현방식은 다양하다

예시

// 1. 가장 기본적인 구현
public class BasicSingleton
{
    private static BasicSingleton instance;
    public static BasicSingleton Instance
    {
        get 
        {
            if (instance == null)
                instance = new BasicSingleton();
            return instance;
        }
    }
    private BasicSingleton() {}
}

// 2. 스레드 안전한 구현
public sealed class ThreadSafeSingleton
{
    private static volatile ThreadSafeSingleton instance;
    private static readonly object lockObject = new object();

    public static ThreadSafeSingleton Instance
    {
        get
        {
            if (instance == null)
            {
                lock (lockObject)
                {
                    if (instance == null)
                        instance = new ThreadSafeSingleton();
                }
            }
            return instance;
        }
    }
}

// 3. 정적 생성자를 사용한 구현
public sealed class StaticSingleton
{
    private static readonly StaticSingleton instance = new StaticSingleton();
    static StaticSingleton() {} // 정적 생성자
    private StaticSingleton() {}
    public static StaticSingleton Instance => instance;
}

 

이유

1. 문제 해결의 다양성

  • 같은 문제도 여러 가지 방식으로 해결 가능
  • 각 해결 방식은 고유한 장단점 보유

 

2. 실제 사용 환경의 차이

  • 성능 요구사항
  • 메모리 제약
  • 플랫폼 특성

 

3. 개발자의 선호도와 경험

  • 팀의 코딩 스타일
  • 기존 코드베이스와의 일관성
  • 유지보수 용이성
패턴들은 상황에 맞게 조합하고 변형하여 사용 한다.

디자인 패턴은 "도구" 라고 생각하면 된다.

망치가 있다고 모든것을 망치로 해결하려 하면 안되듯이,
각 상황에 맞는 적절한 패턴을 선택하는 것이 중요하다
반응형