목표 : 함수에서 실행 핀을 제거하는 방법과 이게 왜 필요한지?
Have Ammo 란 함수는 Ammo 가 0보다 크면 true를, 아니면 false를 리턴하는 함수
그런데 이 함수가 실행핀을 가지고 있는건 좀 어색함.
왜 어떤 함수는 실행핀이 필요하고, 어떤 함수는 필요 없을까?
이것은 바로 side effect 때문.
side effect 란? 함수가 실행되고 식별가능한 효과, 보이는 효과가 생기는 것
ex) Print String, Add Impulse, Set Ammo
그렇다면 모든 함수가 side effect가 있는거 아닌가? 반드시 그런 것은 아님.
순수 함수 : side effect 가 없는 함수. 그러나 값을 리턴함.
순수 함수의 목적은 오직 계산하고 값을 돌려주는 것 뿐.
ex) Get Ammo, Get Actor Forward Vector, 연산(+, -, * 등) 함수
원하는 만큼 해도 상관이 없고 얻은 값으로 뭘 하지 않는 이상 함수 자체의 기능만으론 아무 일도 일어나지 않음.
함수를 순수 함수로 만드는 법 : Details 창에서 pure 체크박스 체크
pure를 체크하자 실행핀이 사라진 것을 확인할 수 있음.
그리고 이 Test 함수 노드의 Out1 출력핀을 Print String 같은 노드에 연결하면 Print String 노드가 실행될 때(정확히는 실행되기 이전에) Test 함수가 실행됨.
사이드 이펙트가 없거나 Has Ammo 함수처럼 보이는 효과가 없는 모든 함수에 똑같이 적용.
주의할 점은 사이드 이펙트가 없는 경우에만 pure 체크박스를 사용해야 함.
그리고 순수 함수에는 동사형의 이름을 붙이지 않음.
뭔가를 하는게 아니라 뭔가 받거나 질문에 대답하는 것이기 때문.
따라서 순수 함수와 그렇지 않은 함수를 비교할때 동사에 빗대보고 질문인지 확인