이전까지는 비쥬얼 스튜디오를 통해 C++ 클래스를 제작, 원하는 레벨에 사용하기 위한 정상적인 기능적인 구현 및 문제 해결을 위한 디버그 방안 마련에 집중했다. 앞으로 플랫폼을 회전시키거나 비슷한 카테고리의 기능을 제작한다면 지금까지 과정들을 반복하여 매번 클래스를 제작해주어야 할까?


객체 지향 프로그래밍
프로그래밍에서는 이러한 비슷한 속성을 갖춘 요소들을 그룹으로 묶어서 관리하는 용어가 따로 있는데 객체 지향 프로그래밍이라는 용어를 사용하여 표현한다
현재 과정에서는 MovinigPlatform의 클래스에 별도의 MovePlatform이란 멤버함수로 코드를 정리를 해서 독립하는 과정을 거친 후에, 회전 기능을 담당하는 RotatePlatform의 함수를 추가하여 한개의 c++ 클래스에 해당 요소들을 하나로 통합하는 과정으로 객체 지향 프로그래밍에 대하여 이해할 수 있도록 구성 되어있다.


함수가 돌아가는 방식
함수 선언은 클래스 헤더 파일에서 작성하게 된다. MovingPlatformReview.h에서는 MovePlatform(); 함수를 작성하여 MovingPlatform.cpp에서 참조하는 함수가 어떠한 함수가 있는지 알려주는 역할을 한다. cpp에서는 실제로 이 함수를 수행하는 정보를 작성하는데 이러한 과정이 함수의 돌아가는 방식으로 작용한다.
클래스에서 함수 선언

class 클래스명
{
접근 지정자;
함수 선언;
}
접근지정자
자세히 살펴보면 클래스 내부에 Public / Protected와 같은 요소들이 각각의 단락의 맨 앞에 있는데, 이 요소들은 클래스의 데이터를 하나로 묶어서 보호하는 기능을 하는데 이를 접근 지정자라 한다.
- Public / 클래스 외부에서 접근 가능
- Protected / 동일 클래스나 클래스의 상속을 받은 경우 접근 가능
- Private / 클래스 외부에서 접근을 방지

private 키워드를 작성하고 기존 작성한 코드를 옮겨주면 해당 내용들은 다른 클래스들이 해당 내용 수정을 막을 수 있게 된다.
멤버 함수
- 클래스 내부에서 정의된 함수
- 현재 경우는 cpp에서 참조하는 함수의 역할을 한다

- 동작을 수행하고 아무런 출력이 없는 경우 함수 반환 값을 void로 작성해주면 된다.
헤더에서 작업과정을 완료한 후 MovingPlatformReivew.cpp 파일로 돌아오게 되면, MovingPlatformReview.h 에서 선언된 함수로 다음과 같은 정리과정을 거치게 된다.
1. Tick에서 에서 작성되었던 코드 항목의 이동
- 플랫폼 이동에 대한 내용을 MovePlaform(); 멤버 함수로 대체하고
- 내부 코드 내용을 외부로 독립
- Tick에서는 어떤 함수들이 작동되는지만 파악이 가능하게 한다.
2. 이전에 작성한 코드 내용을 MovingPlatform();의 내부로 옮기는 작업
- 해당 함수에 대한 코드 항목만 추려지게 되어 작업의 유지보수면에서 편리해진다.

코드는 AMovingPlatfromReview::MovePlatform() 내부로 옮겨 보기에 간결해지고 실행에 관한 부분은 해당 함수에 해당하는내용만 파악하면 된다.
그러나 현재는 작성하면 실질적으로는 코드가 정상으로 돌아가지 않는데, DeltaTime은 Tick으로 별도로 전달되는 형태로 별도로 매개변수를 작성해주어야 한다.
Header

cpp

정리작업
추가 정리 작업을 한다면 AMovingPlatformReview::MovePlatform()에서도 if (DistanceMoved > MovedDistance)에 해당하는 부분을 함수로 만들어주고 별도로 기능을 호출하게 할 수 있다.

Header

앞서 함수가 반환하는 값이 없다면 반환 타입이 void를 사용해서 함수를 작성해주었다. 이번에는 함수를 반환하고 싶으면 Bool을 사용하면 된다.
cpp

반환문
반환 값의 함수 형 클래스의 명 :: 멤버 함수명()
{
반환 값
}
if문의 if (DistanceMoved > MovedDistance)을 ShouldPlatformReturn으로 대체하고 DistanceMoved > MovedDistance를
ShouldPlatformReturn의 내부로 이동시키고 관련 내용을 옮겨적는다.

Tick에서 MovePlatform 함수를 실행할때 마다 참 거짓을 판별하는 ShouldPlatform 함수가 실행 되며 DistanceMoved > MovedDistance를 체크하고 값을 반환하는 과정을 거치게 된다.

ShouldPlatformReturn의 DistanceMoved 또한 같은 방법으로 추가 함수를 제작


Const 함수
처음에 작업한 WareHouse에서 순수함수를 만들어 실행 핀을 없애는 작업을 한적이 있다. 사이드 이펙트에 영향을 주는 요소를 분리하기 위함이다. 마찬가지로 c++에서는 함수를 Const화 하여 해당 함수가 클래스 상태를 수정할 수 없게 만드는 작업을 할 수 있다.
Header

cpp

ShouldPlatformReturn의 함수를 호출해서 If문과 같은 곳에 사용하게 되면 MoveDistance나 PlatformVelocity와 같은 값을 업데이트하게 되어버릴 수 있게 된다. 그래서 Const를 사용하여 클래스를 수정하게 만드는 작업을 못하게 만드는 작업이 Const의 역할이 된다.
'Unreal C++ > C++ - History' 카테고리의 다른 글
| 14 레벨 디자인 및 마무리 / Obstacle Assault (1) | 2025.01.01 |
|---|---|
| 13 C++ 기초 - Rotate 기능 제작 / Obstacle Assault (0) | 2024.12.29 |
| 11 출력 로그 사용 / Obstacle Assault (2) | 2024.12.01 |
| 10 Game Mode / Obstacle Assault (1) | 2024.12.01 |
| 09 충돌 관련 오류 수정 작업 / Obstacle Assault (0) | 2024.11.30 |