[Unreal Engine] BP - 복사와 참조
👻 들어가기에 앞서
두 수의 값을 바꾸는 swap 기능을 구현해보자.
이번엔 함수로 구현해보자.
우선 Set Integer
라는 함수를 통해 A와 B를 바꿔주었다. 브레이크 포인트를 건 후 실행시키면 A, B 값이 바뀌었다는 것을 확인할 수 있다.
💡
Set by ~ (by ref)
해당 타겟을 원하는 값으로 세팅해주는 노드이다. 함수 내부의 경우 입력값을 가져올 수 있는 방법이 없기 때문에 해당 노드를 사용하여 값을 변경해주었다.
- Target : 값을 바꿔줄 기존 값
- Value : 타겟에 적용해줄 값
값이 잘 바뀐 걸 확인한 후 블루프린트에서 함수를 이용해 출력을 해보자.
원래라면 A : 200, B : 100
이 나와야 하는데 A : 100, B : 200
이 나온다.
왜 그렇게 나오는 지에 대해 이해하려면 복사와 참조의 개념을 알아볼 필요가 있다.
👻 복사
모든 변수의 값을 가져오는 방식은 복사(Copy)를 사용한다. get
노드는 해당 변수에 있는 값을 복사해서 읽어온다는 뜻이다.
My Swap
함수에서 A, B의 값이 바뀐 것은 해당 함수 내에 복사된 A, B 값만 바꿔지게 된 것이고, 외부에 있던─우리가 값을 바꾸고 싶은─ A, B는 값이 그대로 남아있게 된 것이다.
실제 값을 건드리고 싶다면 참조 방식을 사용해야한다.
👻 참조
My Swap
함수에서 실제 값을 바꾸고 싶다면, 입력값을 참조(Reference)하여야한다. 참조 방식으로 값을 가져오게되면 복사된 값을 변경하는 게 아닌, 실제 변수에 담겨져있는 값을 건드리게 된다.
함수 정의 부분에서, 입력값을 확장시키면 Pass-by-Reference
라는 체크 부분이 있다. 이 부분을 체크해주면 값을 참조해서 가져오라는 뜻이되며, 실제 A, B 값을 조작하게 되는 것이다.
값을 참조 방식으로 가져오게되면 핀이 마름모 꼴로 바뀌게 되고, (by ref)라는 설명이 붙게된다.
💡 어떻게 가능할까?
참조 방식을 사용하게되면 값을 복사해서 가져오는 게 아닌, 해당 변수의 주소값을 가져와서 사용하게 된다. 포인터의 개념과 유사하다.
주소값을 가져와서 그 주소에 있는 데이터를 실제로 건드리게 되어 값이 변경되게 되는 것이다.
어째 다 같은 말 같다..
👻 글을 마치며
이번 시간에는 복사와 참조의 개념에 대해 알아보았다. 이거 학부생 때 처음 공부할 때도 굉장히 멘붕 왔었던 것 같은데, 역시나 개념 확립이 어렵긴 하다. 여기서는 간단하게 개념만 정리했지만 이 부분은 조금 더 심화학습 할 필요가 있는 것 같다. 개인적으로 공부해서 지금도 개인적으로 공부 중이긴 하지만 더 자세하게 정리되면 따로 포스팅 해야겠다.
Leave a comment