본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-22

순수 함수

직전 강의를 통해 만들었던 Has Ammo 함수의 경우 다소 이상하다고 여길 만한 점이 있다.

그것은 바로 해당 함수에 실행핀이 굳이 필요한가? 이다.

그렇다면 함수에서 실행핀을 없앨 수 있을까? 또 실행핀이 필요한 함수와 그렇지 않은 함수는 어떤 경우가 있을까?

그에 관련해서 우선 사이드 이펙트라는 것을 알아야 한다.

 

사이드 이펙트란 함수가 실행되고 식별 가능한 효과가 생기는 것을 의미한다.

다음 함수들의 예시를 살펴보자.

Print string -> 문자열이 보임
Add Impulse -> 충격이 가해지며 이러한 현상이 눈에 보임
Set Ammo -> 변수의 설정 값이 바뀜

 

이렇게 문자열이 보이거나, 충격이 가해지거나, 변수의 설정 값이 바뀌는 것 이것들은 함수가 실행된 후에 생기는 현상들이기에 사이드 이펙트라고 할 수 있다.

따라서 해당 함수들은 사이드 이펙트를 가진 함수이며, 실행된 이후에 발생하므로 실행핀이 필요한 함수들이라는 것이다.

 

그렇다면 실행핀이 필요 없는 함수는 무엇일까?

바로 사이드 이펙트가 없는 함수들이다.

다음 함수들의 예시를 살펴보자.

Get Ammo -> 탄약을 가져옴
Get Actor Forward Vecotr -> 전방 벡터를 가져옴
Multiply -> 곱하기 연산
Minus -> 빼기 연산
Greater -> 무엇이 더 큰지 비교 연산

 

위 함수들은 아무리 실행해도 생기는 효과가 없다.

Get Ammo를 1번을 실행하든, 100번을 실행하든 게임 내에 미치는 영향은 없다.

다른 함수들도 마찬가지다.

전방 벡터를 가져오든, 비교를 하든, 곱하기, 빼기를 하든 반환된 값을 사용하지 않는 다면 무슨 의미가 있겠는가?

이렇게 얻은 값으로 무언가 하지 않는 이상, 그 프로그램 및 게임은 달라지지 않는다.

이들은 실행 핀이 필요 없는 함수들이며, 순수 함수라고 칭한다.

 

그렇다면 순수 함수는 어떻게 만들 수 있을까?

Has Ammo 함수의 경우 앞선 내용을 통해 사이드 이펙트가 없는 순수 함수인 것을 알았다.

하지만 현재 해당 함수는 실행핀을 가지고 있고, 반환 값만 필요하기에 현재 사용하지 않는다.

 

먼저 전에 만들었던 Test 함수를 통해 가볍게 테스트를 해보자.

Test 함수를 누르고 우측 디테일 패널을 보면, 퓨어라고 적힌 곳을 볼 수 있다.

해당 체크박스를 활성화 하면 해당 함수가 순수 함수로 바뀌게 되며, 실행핀이 사라지게 된다.

 

실행핀이 사라진 순수 함수

 

 

이제 대망의 Has Ammo 함수를 퓨어 함수로 바꿀 차례다.

현재 의미 없는 실행핀이 존재하는 것을 볼 수 있다.

 

순수 함수를 활성화 해준 상태이다.

전보다 훨씬 깔끔하고 직관적인 상태로 바뀐 것을 볼 수 있다.