이전 강의에 이어, 이번에는 값 형식(Value Types)에 대해 예를 들어 설명드리겠습니다.
참조 형식과는 달리, 값 형식은 데이터의 실제 값을 메모리에 직접 저장합니다. C# 스크립트에서 int, float, bool 등과 같은 기본 데이터 타입들은 모두 값 형식입니다.
이제 값 형식을 사용하는 코드를 작성해 보면서 좀 더 자세히 설명해 드리겠습니다.
우선 앞의 챕터에서 사용했던 SampleScript.cs 에서 기존 코드를 다 지우겠습니다.
그리고 Start 함수에서 int 타입의 두 변수, ‘numberA’와 ‘numberB’를 선언하겠습니다.
다음으로는 ‘numberA’에는 10이라는 값을 할당하고, 그 다음 ‘numberB’에는 ‘numberA’의 값을 등호(=)를 이용해 할당하겠습니다.
만약 이 변수들이 ‘참조 형식’이라면, ‘numberA’와 ‘numberB’는 같은 데이터를 가리키고 있을 것입니다. 하지만, 이 변수들은 ‘값 형식’이기 때문에, ‘numberA’의 값을 ‘numberB’에 복사해서 넣는 것이고, 각 변수는 독립적인 값을 가지고 있습니다.
즉, 현재 상태에서 ‘numberA’와 ‘numberB’의 값은 모두 10이지만, 두 변수는 서로 다른 메모리 위치에 값을 가지고 있습니다.
print 명령을 이용하여, 두 변수의 값을 콘솔창에 표시해 보겠습니다.
위 스크립트 파일을 저장하고, 유니티로 돌아가 플레이 버튼을 눌러서 콘솔 창에 표시되는 내용을 확인해 보면 다음과 같을 것입니다.
즉, numberA 의 값은 10이고, numberB 의 값도 10입니다.
이제 게임을 중지하고, 다시 C# 스크립트 파일로 돌아가서, 이번에는 ‘numberB’에 5를 할당하겠습니다.
이제 ‘numberA’의 값을 출력하면 어떻게 될까요? 만약 변수들이 참조 형식이었다면, ‘numberA’와 ‘numberB’가 같은 데이터를 가리키므로, 두 값은 같아야 할 것입니다. (둘 다 5)
그러나, 이 변수들은’값 형식’이므로, 각각 독립적으로 값을 가지고 있습니다. 따라서, ‘numberB’의 값이 나중에 5로 변경되더라도 ‘numberA’의 값은 영향을 받지 않고, 처음에 할당된 값인 10을 그대로 유지하게 됩니다.
과연 그런지, 스크립트 파일을 저장하고, 유니티로 가서 플레이 버튼을 다시 눌러 보겠습니다.
그럼 보시는 것처럼, numberB의 값만 5로 변경되고, numberA 의 값은 원래대로 10인 것을 알 수 있습니다. 참조 타입이었다면 두 값 모두 5로 변경되었을 텐데, 값 타입이라서 numberA 는 영향을 받지 않은 것입니다.
이 예제는 ‘값 형식’의 변수가 메모리에 데이터의 실제 값을 저장하고, 각 변수가 독립적인 값을 가지고 있음을 보여줍니다.
참조 형식과는 달리, 값 형식의 변수에서는 하나의 변수의 값이 변경되어도 다른 변수에는 영향을 주지 않는다는 것을 확인할 수 있는 것입니다.