본문 바로가기
Unity 3D

Unity 3D 엔진 기초 (4) 접근제한자, SerializeField

by 연꿈술사 2023. 8. 6.

안녕하세요 연꿈술사 입니다.

오늘은 유니티 C#에서의 접근제한자에 대해 알아보겠습니다.

 

기본적으로 사용하는 접근제한자는 public, private, internal, protected 가 있습니다.

 

public의 경우에는 모든 클래스 및 외부에서 접근 가능한 접근제한자로, 우리가 이 접근제한자를 사용하여

다른 오브젝트의 컴포넌트로 부착 시 인스펙터 창에 보여지게 할 수 있습니다.

플레이어의 이동속도를 public float speed = 5f; 라고 가정한 뒤 플레이어 오브젝트의 컴포넌트로 부착을 했다고

합시다. 그럼 인스펙터 창에서도 speed에 접근하여 수치를 바꿀 수 있게 해줍니다.

inspector창에 생긴 Speed 변수

게임의 밸런스를 맞추어가는 과정에서 빠르게 수치를 변화하여 확인할 때 사용하기도 합니다. 또한 메서드를 

public으로 선언하여 외부 클래스 등에서 접근하기 쉽게 사용하기도 합니다.

 

 

private의 경우는 클래스 내부에서만 사용할 수 있도록 접근을 제한하는데요, 우리가 보통 접근제한자를 생략하고

쓰는 경우가 많은데 이 경우에 접근제한자는 private이 기본값이 됩니다. 외부에 노출이 되지 않기 때문에 타 클래스에서

수정이 불가능해 유지보수에도 좋습니다.

 

internal은 같은 namespace에서만 공유가 가능하도록 하는 접근제한자입니다.

 

protected접근제한자는 '상속'에 대한 개념을 알고 계시면 이해가 편하실텐데요, 객체지향언어인 C#에서는 부모와 자식

클래스를 만들어 상속을 통해 클래스가 가진 것을 물려받을 수 있게 합니다. 기본적으로 우리가 C# Script를 생성하여 열면

public class Test : Monobehaviour 로 유니티에서 제공하는 Monobehaviour 클래스를 상속받는다는 것을 알 수 있습니다.

이처럼 protected는 부모인 자신과 그 자식만 사용할 수 있도록 만든 접근제한자입니다.

 

여기서 public 접근제한자는 외부에서 접근이 쉽고 변수의 경우에는 inspector창에서도 수정이 가능했습니다. 하지만 이런

무분별한 수정과 타클래스에서 가져다쓰는 등 하게되면 결함이 생겼을 시 유지보수가 매우 불편할 것입니다. 그래서 inspector창에 노출을 통해 수치를 수정할 수는 있지만 타클래스에서는 접근하지 못하게 private을 접근제한자로 두는 기능이 있습니다. 이것이 바로 SerializeField 입니다.

사용시

[ SerializeField]
private float speed = 5f;

이런 식으로 사용할 수 있습니다. 이렇게 사용하면 unity 게임을 실행한 후 수치를 바꿔가며 밸런스 조절을 하고, 외부 클래스 등에서는 접근하지 못하게 해 유지보수를 편하게 할 수 있습니다.

 

오늘은 접근제한자들과 SerializeField 기능에 대해 알아보았습니다.

감사합니다. 연꿈술사였습니다.

 

댓글