전체 글 35

디자인패턴 커맨드 & 유니티 커스텀 에디터

커맨드 패턴은 객체지향 디자인 패턴으로, 요청을 객체로 캡슐화하여 매개변수화된 메서드 호출, 메서드 실행을 취소할 수 있는 기능을 지원합니다. 캡슐화를 통해 재사용성을 높이고 클래스간의 의존성을 제거한다.이 패턴은 요청을 발생시키는 호출자(Invoker), 명령을 받아서 수행하는 수신자(Receiver), 요청을 캡슐화하여 저장하는 커맨드(Command), 명령을 구현하는 구상 커맨드(ConcreteCommand), 구상 커맨드 객체를 만들고 설정하는 클라이언트(Client)로 구성된다. 호출자 (Invoker):요청을 발생시키는 객체.커맨드 객체를 생성하고 실행하는 역할.수신자 (Receiver):실제로 요청을 처리하는 객체.커맨드 객체가 호출될 때 수행될 동작을 구현.커맨드 (Command):요청을 ..

디자인패턴 책임 연쇄 패턴 (Chain of Responsibility)

책임 연쇄 패턴은 요청을 처리할 수 있는 기회를 여러 객체에게 주며 요청을 보내는 객체와 그 요청을 처리할 수 있는 객체들 사이의 결합을 약화시키기 위해 사용된다.  Handler (처리자):요청을 처리할 인터페이스를 정의.체인 내에서 다음 처리자를 설정하거나, 자신이 마지막 처리자인지 여부를 판단하는 메서드를 포함할 수 있다.ConcreteHandler (구체적인 처리자):실제로 요청을 처리하는 역할자신이 처리할 수 있는 요청의 종류를 판단하고 처리할 수 있다.요청을 처리할 수 없다면 다음 처리자로 요청을 전달할 수 있다.Client (클라이언트):요청을 생성하고 체인의 첫 번째 처리자에게 전달한다.   public interface IHandler{ void SetNext(IHandler han..

디자인패턴 컴포지트

컴포지트 패턴(Composite Pattern)은 객체들을 트리 구조로 구성하여 부분-전체 계층을 나타내는 패턴이다. 이 패턴을 사용하면 개별 객체와 복합 객체(여러 개의 객체가 결합된 객체)를 동일하게 취급할 수 있어, 클라이언트 코드에서 객체를 일관되게 처리할 수 있다. 주로 계층 구조를 가진 객체들을 처리하거나, 객체의 구조를 재귀적으로 다룰 때 유용하다.  구성요소 Component (구성 요소):컴포지트 패턴에서 단일 객체와 복합 객체의 공통 인터페이스를 정의한다. 이 인터페이스는 단일 객체와 복합 객체 모두가 구현해야 할 메서드들을 포함한다. 일반적으로 구성 요소는 추상 클래스나 인터페이스로 정의Leaf (단일 객체):컴포지트 패턴에서 최하위 객체로, 더 이상 구성 요소가 없는 객체를 나타낸다..

디자인패턴 프록시

프록시 패턴(Proxy Pattern)은 다른 객체에 대한 접근을 제어하기 위한 대리자 역할을 하는 패턴이다. 주로 객체에 대한 접근을 제어하거나 부가적인 기능을 제공할 때 사용된다. 프록시는 실제 객체와 동일한 인터페이스를 구현하여 클라이언트에게 투명하게 보이며, 필요한 경우에만 실제 객체에 대한 접근을 제공한다. 프록시 패턴의 구성요소 Subject (주체):프록시와 실제 객체가 구현해야 할 인터페이스 또는 추상 클래스. 클라이언트는 이 인터페이스를 통해 실제 객체에 접근한다.RealSubject (실제 주체):프록시가 대리하는 실제 객체. 실제 작업을 수행하는 클래스로, 프록시가 요청을 전달할 실제 대상이다.Proxy (프록시):실제 객체에 대한 접근을 제어하고, 부가적인 기능을 제공하는 객체. 클..

디자인패턴 플라이웨이트 (경량패턴)

플라이웨이트 패턴(Flyweight Pattern)은 메모리 사용을 최적화하기 위한 구조적 디자인 패턴이다. 이 패턴은 많은 수의 유사한 객체를 효율적으로 공유하여 메모리 사용을 줄이는 것을 목표로 한다.public interface StringFlyweight{ void Display();}FlyWeight 인터페이스 public class ConcreteStringFlyweight : StringFlyweight{ private string value; public ConcreteStringFlyweight(string value) { this.value = value; } public void Display() { Debug.Log("V..

디자인패턴 퍼사드

퍼사드 패턴(Facade Pattern)은 객체지향 디자인 패턴 중 하나로,  복잡한 시스템 혹은 서브시스템을 감싸는 외부 인터페이스를 제공하여, 이 인터페이스를 통해 시스템에 접근할 수 있도록 하는 패턴이다. 주로 복잡한 시스템을 단순화하고 클라이언트가 쉽게 사용할 수 있도록 하는 목적으로 사용된다. 간단하게 말해 사용자는 내부 구조를 알 필요가 없다는 것이다.가게에서 피자를 시킬때 고객은 프론트 데스크를 통해 피자를 주문하고 싶어 하지만, 프론트 데스크는 실제로 주방, 재료 공급, 배달 등의 여러 복잡한 내부 시스템과 상호 작용한다. 고객은 이 모든 내부 시스템에 대해 알 필요가 없고, 단지 프론트 데스크를 통해 피자를 주문하면 된다. 퍼사드 패턴을 이해하게 되면, 우리가 유니티에서 스크립트를 작성할..

디자인패턴 데코레이터

데코레이터 패턴은 구조를 수정하지 않고도 객체에 새로운 책임을 동적으로 부여할 수 있는 구조적 디자인 패턴이다.이 패턴은 같은 클래스의 다른 인스턴스에 영향을 주지 않고 객체에 기능을 추가해야 할 때 특히 유용하다. 주요 구성 요소Component: 기본 기능을 정의하는 인터페이스나 추상 클래스ConcreteComponent: Component를 구현한 실제 객체Decorator: Component와 동일한 인터페이스를 구현하며, 내부에 다른 Component를 감싸고 추가적인 기능을 제공하는 클래스ConcreteDecorator: Decorator를 상속받아 실제 기능을 추가하거나 수정하는 클래스유니티에서 활용해보자using UnityEngine;public abstract class Character..

디자인패턴 브릿지

디자인 패턴에서 브리지(Bridge) 패턴은 구조적 디자인 패턴이다. 구현부에서 추상층을 분리하여 각각을 독립적으로 변형할 수 있게 해준다. 이는 두 개의 계층(추상화 계층과 구현 계층)을 독립적으로 확장할 수 있는 유연성을 제공한다. 간단하게 예를 들면 운송 수단을 설계할 때, 추상적인 '운송 수단'에 대한 기능을 추상화 계층에서 정의하고, 그 운송 수단들이 어떻게 구체적으로 동작하는지는 구현 계층에서 구현한다. 이를 통해 추상화 계층의 변경 없이 구현 계층을 바꿀 수 있는 장점을 얻을 수 있다.  또 다른 예를 유니티에서 이해해보자public interface IWeapon{ void UseWeapon();}public class Sword : IWeapon{ public void UseW..

RenderTexture를 이용하여 CCTV만들기 (미니맵 활용 가능)

프로젝트 탭에서 우클릭 후 Render Texture와 Material를 생성해준다.  Material의 Shader는 Unlit/Texture로 변경해준 후 Renderer Texture를 적용시켜준다. 카메라를 하나 생성한 뒤 자신이 원하는 곳에 위치시켜준다. 카메라의 Target Texture를 처음에 만든 Renderer Texture로 적용시킨다. 그 다음으로 하이어라키 창에서 모니터가 될 오브젝트를 하나 생성한 뒤 배치시켜준다.3D라면 Quad를 생성시켜주면 되고 2D라면 이미지를 생성시켜주면 된다.  생성이 완료되면 Material를 담아준다.  완료되면 자신이 만든 오브젝트에 화면이 정상적으로 나오는 것을 확인할 수 있다.나는 플레이어가 죽었을때 Canvas에서 보이게 하기 위해 2d 이미..