[Unity] C# 접근 한정자 + 인스펙터에서 변수 확인하기 (Debug Mode)
2022. 2. 15. 23:30ㆍGame Development/Unity
C#의 접근 한정자(Access Modifier)
찾아보니, C#은 대략 다음과 같이 6개 종류 정도의 접근한정자(Access Modifier)가 있는 것 같다.
public class Test : MonoBehaviour // 유니티에서 작성함
{
public float publicVar;
private float privateVar;
protected float protectedVar;
internal float internalVar;
protected internal float ptItVar;
private protected float prprVar;
}
.NET C# 가이드 문서를 보면 다음과 같이 설명이 되어 있다.
여기서 "동일한 어셈블리 내에 있는" 이런 문장은 같은 프로젝트 파일 내에 있다라고 이해해도 좋을 것 같다.
/* 물론 정확하진 않지만 이해를 돕기 위해 */
- public : 동일한 어셈블리 내 또는 다른 어셈블리에서도 접근이 가능
- private : 같은 클래스 또는 구조체 내부에서만 접근 가능
- protected : 같은 클래스 또는 해당 클래스의 자식 클래스에서만 접근 가능
- internal : 동일한 어셈블리 내에서만 접근 가능
- protected internal : 동일한 어셈블리 내 또는 다른 어셈블리에서 해당 클래스의 자식 클래스에서 접근 가능
- privateprotected : 같은 클래스 내 또는 자식 클래스에서 접근 가능
- 네임스페이스 내부에서 선언된 클래스, 구조체, 인터페이스의 디폴트 한정자는 internal
- 인터페이스의 멤버는 public이 기본값이다.
- enum의 멤버는 항상 public이며, 어떤 접근 한정자도 사용할 수 없다.
- 클래스와 구조체의 멤버에 대한 디폴트 한정자는 private
- 델리게이트는 클래스나 구조체처럼 동작하기 때문에 네임스페이스에서 직접 선언 시엔 internal, 그 안에 있는 클래스 같은 곳에 선언될 시에는 private
- 자식 클래스는 기본적으로 부모 클래스보다 높은 수준의 접근 제한을 걸 수 없다.
- 예를 들어, internal로 선언한 부모 클래스의 자식 클래스는 public으로 선언할 수 없음
Unity의 인스펙터에서 변수 값 확인하기
- Unity에서는 클래스 내부의 public으로 선언된 변수들을 인스펙터 창에서 확인이 가능하며 값 변경도 가능하다.
- 따라서, 디버깅할 때 굉장히 유용하다.
- 하지만 그 외 나머지 private, protected 등으로 선언된 변수는 인스펙터에 나타나지 않는다.
이런 제한된 변수들을 인스펙터에서도 확인할 수 있는 방법이 있다.
Unity 디버그 모드 활용하기
인스펙터에서 디버그 모드로 변경을 하면 숨겨진 내부 변수들까지 확인이 가능하다. 단, 수정은 안 된다.
[SerializeField] 애트리뷰트 사용하기
[SerializeField] 애트리뷰트를 사용하면 private, protected 멤버도 인스펙터에서 접근할 수 있게 된다.
접근 한정자의 효력도 유지되고, 인스펙터에서도 접근이 가능하기 때문에 이 방법을 추천한다.
public class Test : MonoBehaviour
{
[SerializeField]
private float privateVar;
[SerializeField]
protected float protectedVar;
}
애트리뷰트에 대한 공부를 아직 못했기 때문에 이런 것이 있구나란 것만 알아뒀다.
나중에 공부해봐야지!
728x90
반응형
'Game Development > Unity' 카테고리의 다른 글
[Unity] 일방향 충돌, 측면 마찰 및 반발력을 설정할 수 있는 Platform Effector 2D (0) | 2022.02.19 |
---|---|
[Unity] 빌트인 파티클 시스템(Built-in Particle System) : 메인 모듈(Main Module) (0) | 2022.02.17 |
[Unity] 트랜스폼(Transform)에 대해 조금 더 공부하기 (0) | 2022.02.14 |
[Unity] 클릭(터치)한 화면 좌표로 캐릭터 이동 시키기 (0) | 2022.02.01 |
[Unity] 그래픽 최적화를 하는 방법들 (Low Polygon, Clipping Planes, Occlusion Culling) (0) | 2022.01.30 |