본문 바로가기

강동새싹언리얼수업/언리얼

Command 캡슐화

 

커맨드 패턴(Command Pattern)은 요청을 객체의 형태로 캡슐화하여 매개변수화하고, 이를 이용해 연산을 지연하거나 요청 내역을 큐에 저장하고 취소 가능하도록 하는 디자인 패턴

 

캡슐화

객체의 형태로 캡슐화하는 것은 객체 내부의 데이터나 메서드를 외부로부터 감추고, 외부에서는 해당 객체의 내부 구현에 직접적으로 접근할 수 없도록 하는 것을 의미 = 정보 은닉(Information Hiding)

 

보안과 안정성: 객체의 내부 상태와 구현 세부사항을 감춤으로써 외부에서의 무분별한 접근을 방지합니다. 이는 데이터 무결성을 보호하고 의도치 않은 변경으로부터 객체를 보호하는 데 도움이 됩니다.

추상화: 객체의 내부 구현을 감추면 외부에 제공되는 인터페이스만 공개됩니다. 이를 통해 외부 사용자는 해당 객체가 어떻게 작동하는지에 대해 신경 쓰지 않고 인터페이스를 통해 상호 작용할 수 있습니다.

모듈화와 유지보수성: 객체가 외부에 영향을 미치지 않고 내부 구현을 변경할 수 있으므로, 객체의 내부 변경이 다른 부분에 영향을 미치지 않고 개선할 수 있습니다. 이는 코드를 모듈화하여 유지보수성을 향상시키는 데 도움이 됩니다.

재사용성: 객체의 외부 인터페이스를 사용하여 동일한 객체를 다양한 상황에서 재사용할 수 있습니다. 외부에 노출된 인터페이스를 통해 객체의 재사용성을 높일 수 있습니다.

Command 활용 예제

    •  

Command 클래스를 기반으로 MoveUnitCommand 클래스를 만들었습니다. 

    •  

Execute()는 특정 유닛을 이동시키고, Undo()는 이동한 위치를 이전 상태로 되돌립니다.

    •  

실제 게임에서는 Command 객체를 생성하고 이를 사용하여 게임 상태를 변경할 수 있습니다. 

    •  

예를 들어, 게임 루프 내부에서 Command를 만들어 실행하고 Undo 기능을 통해 이전 상태로 돌아갈 수 있습니다.

  • 언리얼에서 커맨드 예제 Undo 만들기

Command.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"

/**
 * 
 */
class THIRDPERSONTEMPLATE_API CommandD
{
public:
	CommandD();
	~CommandD();
public:
	virtual void Execute() = 0;
	virtual void Undo() = 0;
};

cpp구현없음

None상속으로 MoveUnitCommand 만듬

'강동새싹언리얼수업 > 언리얼' 카테고리의 다른 글

231214 VR First  (0) 2023.12.14
프로그래밍패턴  (0) 2023.12.13
HLOD System  (0) 2023.12.13
디자인패턴  (0) 2023.12.13
231212 Observer  (0) 2023.12.12