Pv_log

유니티 에디터 상에서 public처럼 private 변수 값에 접근하는 법 본문

Develop Study/Unity

유니티 에디터 상에서 public처럼 private 변수 값에 접근하는 법

Priv 2021. 7. 10. 22:59


 

 


출처

 

Programming Basics: Next Steps) Lesson 6.1 - Project Optimization

출처 Lesson 6.1 - Project Optimization - Unity Learn Overview: In this lesson, you will learn about a variety of different techniques to optimize your projects and make them more performant. You may..

arainablog.tistory.com


 

1. public

public 접근 제어자는 일반적으로 클래스 또는 변수에 접근할 수 있는 범위를 지정해주는 역할을 한다.

유니티라고 특별하게 달라지는 것은 없기 때문에 '일반적으로'라는 표현도 의문스럽긴 하지만, 유니티가 게임 엔진인 만큼 이에 맞춰 추가되는 특징이 하나 더 존재한다.

상단의 사진처럼 스크립트 컴포넌트를 에디터 상에서 추가해준 뒤 public으로 변수를 선언할 경우, VS2019를 실행하지 않고도 에디터 상에서 값을 바로 수정할 수 있다.

또한 private를 사용할 경우, 에디터 상에서도 값을 수정할 수 있는 항목이 사라지며, 해당 클래스 내에서만 접근할 수 있도록 제한된다.

상당히 편리한 기능일뿐더러, 인게임(게임 플레이 도중) 상태에서도 값을 수정할 수 있기 때문에 벨런스 조정을 위해서도 필수적인 기능이다.

하지만 여기서 우려가 드는 점은, public의 접근 제어자를 사용하면 누구나 마음대로 외부에서 해당 변수 또는 클래스에 제한 없이 접근할 수 있다는 것이다.

간단한 프로젝트를 진행하고 있다면 크게 와닿지 않는 부분이겠지만, 팀원들과 함께 작업하거나, 수십~수백 개의 컴포넌트가 서로 상호작용하는 복잡한 프로젝트에서는 어떻게 느껴질까?

에디터 상에서 값을 수정할 필요가 있다는 이유만으로 무조건 public을 사용해 접근 권한을 활짝 열어버린다는 것은 프로그래머 입장에서 생각해 봤을 때 상당히 우려스러울 수밖에 없다.

그렇다면 private의 접근 제어자를 그대로 사용하면서 유니티 에디터 상에서만 값을 수정할 수 있도록 만드는 방법은 없을까?

 


 

2. [SerializeField]

있다.

사실 1번째 사진에 답이 있었다.

위의 사진은 1번째 사진에 캡처된 Vehicles Controller라는 이름의 스크립트를 캡처한 것이다.

변수를 선언한 부분을 보면 모두 private로 되어 있지만, public을 사용했을 때와 동일하게 에디터 상에서 값을 수정할 수 있었다.

이는 private 접근 제어자 앞에 붙여준 [SerializeField] 키워드 덕분이다.

즉, [SerializeField] 키워드를 private 타입의 변수 앞에 붙여주면, private 접근 제어자의 기능을 그대로 유지(외부에서 접근 불가)하되, 유니티 에디터 상에서만 변수의 값에 접근할 수 있도록 만들 수 있다.

 

(대충 public 남발 멈춰! 짤)


Comments