
Unity에서의 접근제한자란?
Unity로 게임을 개발하다 보면 스크립트에서 변수나 메서드 앞에 public, private, protected 같은 키워드를 자주 보게 됩니다. 이들은 접근 제한자(access modifiers)라고 불리며, 코드의 캡슐화(encapsulation)를 돕는 중요한 개념입니다.
이번 글에서는 Unity에서 자주 사용하는 접근제한자들의 의미와 그 차이점, 그리고 SerializeField와 함께 사용하는 방법에 대해 설명하겠습니다.
접근제한자란?
접근제한자는 클래스 내부의 필드(변수), 메서드(함수), 속성, 클래스 자체 등에 대해 어디서 접근 가능한지를 제어합니다. 이를 통해 불필요한 외부 접근을 막고, 코드의 안정성과 유지보수성을 높일 수 있습니다.
주요 접근제한자와 차이점
제한자접근 가능 위치설명
| public | 어디서든 접근 가능 | 외부 클래스나 인스펙터에서도 자유롭게 접근할 수 있음 |
| private | 해당 클래스 내부에서만 접근 가능 | 가장 제한적인 접근 수준, 기본 접근자 (명시하지 않으면 보통 이것) |
| protected | 자기 자신 및 상속받은 클래스에서만 접근 가능 | 상속 구조에서 자주 사용됨 |
| internal | 같은 어셈블리 내에서만 접근 가능 (Unity에서 자주 사용되진 않음) | C#에서 사용하는 .NET 내의 접근 제한자 |
| protected internal | 상속 클래스 또는 같은 어셈블리 내에서 접근 가능 | 제한을 부드럽게 조절하고 싶을 때 사용 |
| private protected | 자기 자신 + 같은 어셈블리 내부의 상속 클래스에서만 접근 가능 | 가장 제한적인 상속 접근 수준 |
Unity와 SerializeField
Unity에서는 변수에 public을 붙이면 인스펙터(Inspector)에서 해당 변수를 수정할 수 있게 됩니다. 하지만 이렇게 하면 다른 클래스에서도 이 변수를 마음대로 수정할 수 있는 위험이 있습니다.
이럴 때 사용하는 것이 SerializeField입니다.
[SerializeField]
private float moveSpeed = 5f;
- private으로 외부 접근은 막되
- SerializeField로 Unity 에디터 인스펙터에서 노출되도록 합니다.
이는 캡슐화는 유지하면서, 디자이너가 인스펙터에서 값을 조정할 수 있도록 하는 좋은 습관입니다.
예시: 잘못된 사용 vs 권장 사용
잘못된 예 (보안 X, 유지보수 어려움)
public float moveSpeed = 5f; // 외부에서 접근 가능, 변경 위험 있음
권장 예 (보안 O, 유연함)
[SerializeField]
private float moveSpeed = 5f; // 인스펙터 노출 + 외부 직접 접근 불가
접근제한자는 단순히 코딩 스타일의 문제가 아니라, 코드의 안정성과 의도를 정확히 표현하는 데 중요한 도구입니다. Unity에서는 SerializeField와 함께 적절한 접근제한자를 사용하는 습관을 들이면 협업 시 실수를 줄이고 유지보수가 쉬운 구조를 만들 수 있습니다.
다음 글에서는 이와 관련된 캡슐화(Encapsulation)와 속성(Properties)에 대해 다뤄보겠습니다.
'Unity' 카테고리의 다른 글
| Unity에서 SOLID 원칙이란? (1) | 2025.05.13 |
|---|---|
| Unity에서 static 한정자란? (0) | 2025.05.12 |
| Unity에서의 객체? 클래스? 생성자? (0) | 2025.05.07 |
| Unity에서의 Scroll기능 (0) | 2025.04.23 |
| Unity에서 IEnumerator와 Coroutine의 모든 것 (0) | 2025.04.21 |