2024/10/14 29

[DesignPattern] 프로토타입 패턴

Prototype Pattern이란?어떤 객체가 자기와 비슷한 객체를 스폰 할 수 있도록 하는 패턴예제몬스터 스포너public class Monster{}public class Ghost : Monster{}public class Demon : Monster{}public class Sorcerer : Monster{}public class Spawner{ public virtual Monster SpawnMonster(){}}public class GhostSpawner : Spawner{}public class DemonSpawner : Spawner{}애초에 요즘은 몬스터를 각기 다른 클래스로 만들지도 않지만, 각각의 몬스터에 따라 스포너를 만들어줘야하는 문제가 생긴다.Monster에 추상 매..

CS/DesignPattern 2024.10.14

[DesignPattern] 경량 패턴

Flyweight Pattern이란?객체들이 공유하는 데이터들을 분리해, 공유하게 만들어 메모리사용량을 줄이는 패턴공유할 수 있는 데이터를 고유상태(intrinsic state) / 자유문맥(context-free) 상태라고 함인스턴스 별로 값이 다른 데이터는 외부상태(extrinsic state)라고 한다.예제 - Terrain열거형으로 사용한다면enum Terrain{ TERRIN_GRASS, TERRAIN_HILL, TERRIN_REIVER}class World{ private Terrain tiles_[WIDTH][HEIGTH]; public int GetMovementCost(int x, int y){ switch(tiles_[x][y]){ ..

CS/DesignPattern 2024.10.14

[Trouble shooting] 마우스 좌표 변환과 유니티 inputfield의 문제

ScreentoWorld문제상황동적으로 오브젝트들을 생성해주는데, 캐릭터가 생성되고나서 마우스 방향을 제대로 바라보지 못하는 문제가 발생디버깅ScreentoWorldPostion을 수행하고나면 카메라의 위치를 뱉는 문제를 찾음원인추정 및 해결방안PixelPerfectcamera2년전 문서가 남아있음. 업데이트되면 잘 된다고 함. 해당 컴포넌트를 지워도 작동하지 않음.z축이 0으로 들어가는 문제Vector2 aim = value.Get();Vector2 worldPos = Camera.main.ScreenToWorldPoint(aim);aim = (worldPos - (Vector2)this.transform.position).normalized;CallLook(aim);ScreenToWorldPoint에..

카테고리 없음 2024.10.14

[DesignPattern] 커맨드 패턴

Command Pattern이란?매서드 호출을 실체화 한 것실행될 행동을 객체로 감싸는 것플레이어의 입력을 받는 함수를 짠다고 가정 할 때간단 버전public class InputHandler{ public handleInput(){ if(isPressed(BUTTON_X)) jump(); else if(isPressed(BUTTON_Y)) fireGun(); else if(isPressed(BUTTON_A)) swapWeapon(); else if(isPressed(BUTTON_B)) lurchIneffectively(); }}문제점입력 키의 변경이 불가능함개선 버전public class Command{ public virtual ..

CS/DesignPattern 2024.10.14

[DesignPattern] 옵저버 패턴

Observer Pattern이란?객체의 변화를 캐치하고, 그 객체에 의존하는 다른 객체들이 자동으로 알림을 받고 업데이트 될 수 있도록 하는 방법일대다 의존성을 갖게됨이벤트 기반 시스템이나 GUI 응용 프로그램에서 많이 사용됨Observer Pattern 구조Subject : 상태를 관리하고, 옵저버들을 등록하거나 삭제할 수 있는 객체. 상태가 변하면 모든 옵저버들에게 변경사항을 통지Observer : 주제의 상태를 관찰하는 객체.public class Player{ private List observers = new List(); private int health; public int Health{ get{return health;} set{ ..

CS/DesignPattern 2024.10.14

[DesignPattern] 전략 패턴

Strategy Pattern 이란?객체의 행위를 런타임에 동적으로 변경할 수 있도록 하는 디자인 패턴알고리즘(행동) 군을 정의하고, 각 알고리즘을 캡슐화하여 서로 교환 할 수 있도록 함.State Pattern의 구조Context : Strategy 객체를 참조하고, 그 객체를 통해 클라이언트 요청을 처리함Strategy : 공통된 인터페이스 또는 추상 클래스로, 각기 다른 알고리즘을 정의함ConcreateStrategy : Strategy 인터페이스를 구현하여 특정 알고리즘을 제공public interface IWeaponStrategy{ void Attack();}public class SwordStrategy: IWeaponStrategy{ public void Attack(){ ..

CS/DesignPattern 2024.10.14

[DesignPattern] 싱글톤 패턴

Singleton Pattern 이란?특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장해당 인스턴스에 전역적으로 접근 할 수 있도록 함State Pattern의 구조외부에서 생성하지 못하도록 생성자를 private로 막음Instance 프로퍼티를 사용해 get할때 없다면 생성될 수 있도록 함public class Singleton{ private static Singleton instance = null; private Singleton(){} public static Singleton Instance{ get{ if(instance ==null) instance = new Singleton(); retur..

CS/DesignPattern 2024.10.14

[Design Pattern]상태 패턴

State Pattern이란?객체의 내부 상태에 따라 객체의 행동을 변경하는 디자인 패턴상태의 변경이 객체의 클래스 변경을 동반하지 않고 동적으로 이루어질 수 있도록 해줌상태패턴은 객체를 캡슐화하고 상태 전환이 객체의 메소드 호출에 영향을 미치도록 설계함State Pattern의 구조Context 클래스는 상태 객체를 갖고 있으며, 상태에 따른 행동을 State인터페이스를 통해 위임함State 인터페이스는 handle()과 같은 상태별로 구현될 메서드를 정의함ConcreteState 클래스는 State 인터페이스를 구현하며, 각 상태에 대한 구체적인 행동을 정의함public interface IQuestState{ void Handle(Quest quest); public string GetS..

CS/DesignPattern 2024.10.14

[CS] SOLID 원칙

SOLID객체지향 프로그래밍에서 좋은 소프트웨어 설계를 위한 다섯가지 원칙Single Responsibility Priciple (SRP)하나의 클래스는 하나의 책임/기능만 가져야 함하나의 클래스가 여러 가지 역할을 수행하게 되면 변경이 필요할 때 해당 클래스의 여러 부분을 수정해야해서 유지보수가 어려워짐Open/Closed Priniciple (OCP)소프트웨어 엔티티는 확장에는 열려 있어야 하지만, 수정에는 닫혀 있어야 함 새로운 기능이 필요하면 기존 코드의 수정이 아닌 확장하는 방식으로 해결 할 수 있어야함소프트웨어 엔티티 :* 클래스, 모듈, 함수Liskov Subsitution Principle (LSP)서브타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다자식 클래스가 부모 클래스의 ..

CS 2024.10.14