[언리얼엔진5 입문] 38. 새로운 멤버 함수 정의, const 멤버 함수

ASP·2024년 4월 5일
0

언리얼엔진5 입문

목록 보기
38/41

클래스의 새로운 멤버 함수를 생성 및 구현하려고 함. 어떻게 할까?

함수의 선언은 헤더 파일에 하고, 함수의 정의(구현)는 cpp 파일에서 함.

클래스의 새로운 멤버 함수 MovePlatform 를 생성하려고 함.

헤더파일에서 다음과 선언.

이때, 기존에 생성했던 변수와 MovePlatform 은 클래스 외부에서 사용하지 못하도록 private 접근 지정자로 제한.

그리고 cpp 파일에서 다음과 같이 코드 작성.

먼저 Tick 함수에서 기존에 있던 플랫폼 움직이는 코드를 전부 제거하고 MovePlatform 함수 호출.

플랫폼의 이동과 관련된 모든 코드를 MovePlatform 함수 내에 작성.

DeltaTime을 이용해야 하므로 Tick 함수에서 인자로 DeltaTime을 받아야 함.


마찬가지로 RotatePlatform 이라는 멤버 함수 생성

GetName 함수는 반환 타입이 FString 이므로 위처럼 역참조를 바로 사용 가능.


bool 타입의 ShouldPlatformReturn 함수 생성


이동한 거리를 반환하는 GetDistanceMoved 함수 생성


블루프린트에서는 side effect, 즉 실행 결과 보이는 효과가 없는 함수인 순수 함수를 생성할 수 있었음.

C++에서는 더 강력한 기능을 제공하는데, 그것이 바로 함수의 const화.

const 함수란, 해당 함수가 클래스의 상태를 수정할 수 없는 함수.

const 함수는 함수 내부에 구현된 코드를 실행하지만, 그 결과 클래스를 수정하지 않음.

사용 방법은 함수의 괄호 뒤에 const 키워드를 입력.

위와 같이 코드를 작성하면 오류가 발생하는 것을 확인할 수 있는데, 그 이유는

const 함수에서는 const 가 아닌 함수는 호출할 수 없기 때문임.

예를 들어, GetActorLocation 함수는 호출할 수 있음. 액터의 현재 위치만 가져올뿐, 클래스를 수정하지 않는 const 함수이기 때문임.

그러나 SetActorLocation 함수는 클래스의 위치를 변경하는 함수이므로 const 함수가 아님. 따라서 호출 불가.

따라서 GetDistanceMoved 함수도 const 함수로 변경.

또한 만약에 const 키워드를 사용했는데, 해당 함수 내에서 MoveDistance 같은 클래스의 멤버 변수를 수정하면 수정할 수 없다는 에러 발생.

profile
언리얼엔진 개발자의 길

0개의 댓글