2024. 11. 8. 21:49ㆍ카테고리 없음
코드 작성 기준
- 결국 핵심은 의존성, 결합도를 줄이는 것에 집중 -
클래스끼리는 의존성과 결합도를 줄이는게 중요하고, 코드 내부적으로는 불필요한 생성, 불필요한 탐색/정렬, 불필요한 연산/조건문을 줄여야 한다.(else if, switch 같은것들)
어떻게 하면 else if 문을 줄이지?
어떻게 하면 switch case를 줄이지?
위에 두가지생각을 첫번째 기준으로 잡고 코드를 작성하면 좋다.
너무 처음부터 디자인 패턴에 집중하지 말고 코드 다 작성후에 의존관계를 다 끊어버리고 이게 어떤 패턴일까를 찾는게 더 빠르다.
Facade( 파사드 패턴 )
여러 클래스를 하나의 클래스에서 관리한다.
사용이유
여러 클래스를 하나의 클래스로 관리하기 때문에 접근하기 쉽다.
사용방법
1. 관리할 클래스를 만든 후, 관리 받을 클래스를 GetComponent 등을 통해 추가하면 된다.
사용예시
Shape를 관리하는 클래스로 만들어 놓고 관리받을 클래스인 Circle과 Square 와 같은 여러 도형 클래스를 Shape 클래스에서 관리하면 모든 도형 기능을 쉽게 사용할 수 있다.
Bridge( 브릿지패턴 )(캐싱)
브릿지 패턴은 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있도록, 기능을 서로 분리하는 데 있다.
사용이유
기존 코드를 변경하지 않고도, 새로운 기능을 추가할 수 있어서 사용 ( 협업할때 충돌 발생을 예방할 수 있다. )
사용방법
1. 인터페이스나 추상 클래스에서 추가할 함수를 작성후 해당 클래스에 상속으로 붙여서 사용한다.
2. AddComponent를 사용해서 만들어 놓은 클래스를 연결하여 해당 기능을 사용할 수 있게 만든다.
사용예시
Shape와 Color라는 두 개의 클래스를 분리하고, Circle과 Square 같은 도형 클래스에서 Color를 다양한 방식으로 사용할 수 있게 만들어 각 도형에 다양한 색상을 독립적으로 추가할 수 있게 만들 수도 있다.
Template Method( 템플릿 메서드 패턴 )(상속)
부모 클래스에서 알고리즘의 구조를 정의한 후, 자식 클래스에서 세부적인 단계를 구현하는 패턴이다. 부모 클래스는 알고리즘의 흐름을 결정하고, 자식 클래스는 그 흐름에 맞는 세부 사항을 구현하게 된다.
사용이유
1. 알고리즘의 기본 구조를 부모 클래스에서 정의하고, 세부 구현을 자식 클래스에서 하도록 하여 코드 재사용을 극대화할 수 있다.
2. 유지보수가 용이하며, 알고리즘의 구조를 변경하지 않고도 세부 동작만 수정할 수 있습니다.
사용방법
1. 부모 클래스에서 알고리즘의 구조를 템플릿 메서드로 정의하므로 알고리즘의 흐름을 제시한다.
2. 알고리즘의 세부 단계는 추상 메서드나 후크(hook) 메서드로 정의하여 자식 클래스에서 구현하도록 한다.
3. 자식 클래스에서는 부모 클래스에서 정의한 템플릿 메서드를 사용하여 구체적으로 구현한다.
사용예시
게임 알고리즘을 구현한다고 할 때, 부모 클래스에서는 게임을 진행하는 기본적인 흐름을 정의하고, 각 게임 모드 (예: PlayerGame, ComputerGame)에서는 구체적인 세부 사항을 구현할 수 있습니다.
Singleton (싱글톤 패턴)
특정 클래스에 대해 인스턴스가 오직 하나만 존재하도록 보장하고, 그 인스턴스에 글로벌 접근을 제공하는 패턴이다.
싱글톤 패턴을 사용하면 인스턴스를 여러 곳에서 참조할 수 있도록한다.
사용이유
애플리케이션 전체에서 하나의 인스턴스만 필요하고, 이를 여러 곳에서 공유하여 사용할 수 있어 메모리 사용을 절약할 수 있다.
사용방법
1. 클래스 내에서 public static 변수로 유일한 인스턴스 변수를 생성합니다.
2. 생성자는 private으로 선언하여 외부에서 직접 생성하지 못하도록 막습니다.
사용예시
게임 내에서 게임 매니저나 오디오 매니저처럼 하나의 인스턴스만 필요한 객체를 싱글톤으로 관리할 수 있다. 예를 들어, GameManager 클래스에서 게임 상태를 관리하고, 이를 게임의 어느 부분에서든 접근할 수 있게 할 때 유용하다.
Flyweight (플라이웨이트 패턴)(스크립터블 오브젝트 사용)
많은 객체들을 효율적으로 관리하기 위해 동일한 데이터나 속성을 공유하여 메모리 사용을 절약하는 디자인 패턴이다.
스크립터블 오브젝트를 사용해서 관리하는 패턴이라고 보면 된다.
사용이유
객체가 많을 경우 메모리 절약을 위해 공유 가능한 객체는 공유하고, 각 객체에서 변경 가능한 부분만 분리하여 메모리를 절약할 수 있다.
사용방법
1. 공유 가능한 부분과 개별적인 부분을 분리한다.
2. Flyweight 객체는 공유할 데이터만 담고 있으며, 객체가 고유해야 하는 데이터는 외부에서 전달받는다.
사용예시
게임에서 여러 적들이 동일한 종류의 몬스터 객체를 공유할 수 있다. 예를 들어, 모든 슬라임 몬스터가 동일한 텍스처와 속성을 공유하고, 위치나 상태만 다르게 관리할 수 있다.
MCV, MVP, MVVM 패턴
MVC :
- 여러 컴포넌트에 정보를 전달하는 구조
- 모델(Model), 뷰(View), 컨트롤러(Controller)가 분리되어 각자 역할을 수행
MVP :
- 한 곳에 정보를 전달하는 구조
- 뷰(View)가 프리젠터(Presenter)에 의존하고, 프리젠터가 모델(Model)을 처리하여 뷰에 전달
MVVM :
- UI와 모델을 연결하는 구조
- 뷰모델(ViewModel)이 모델과 뷰 사이를 연결하고, 데이터 바인딩을 통해 상호작용