반응형
디자인 패턴
소프트웨어 개발과정에서 자주 발생하는 문제들에 대한 일반적인 해결책
건축가들이 사용하는 기본 설계도와 비슷한 개념이다
핵심 구성요소
문제 상황 - 패턴이 해결하려는 반복적으로 발생하는 문제
해결책 - 그 문제를 해결하기 위한 설계 방법
결과 - 해결책을 적용했을 때의 장단점
디자인 패턴의 종류
크게 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. 개발자의 선호도와 경험
- 팀의 코딩 스타일
- 기존 코드베이스와의 일관성
- 유지보수 용이성
패턴들은 상황에 맞게 조합하고 변형하여 사용 한다.
디자인 패턴은 "도구" 라고 생각하면 된다.
망치가 있다고 모든것을 망치로 해결하려 하면 안되듯이,
각 상황에 맞는 적절한 패턴을 선택하는 것이 중요하다
반응형
'유니티 > 디자인패턴' 카테고리의 다른 글
[Unity] 유니티 C#) ObjectPool 패턴 (0) | 2024.12.04 |
---|---|
[Unity] 유니티 C#) Singleton 패턴 (0) | 2024.12.03 |
[Unity] 유니티 C#) EventBus 패턴 (0) | 2024.12.03 |
[Unity] 유니티 C#) Command 패턴 (0) | 2024.12.03 |
[Unity] 유니티 C#) State 패턴 (0) | 2024.12.02 |