amplitude.init("2e2e5a386856efdf3237cf254a9d14d9"

[개념 콕] 유니티 접근 제한자(접근 제어자)

내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다.
Jun 05, 2024
[개념 콕] 유니티 접근 제한자(접근 제어자)
✍🏼
유니티(Unity) 입문자 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 Unity 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 

접근 제한자 (Access Modifier)

유니티에서 접근 제한자(Access Modifier)는 클래스, 변수, 함수 등에 대한 접근 권한을 제어하는 키워드입니다. 접근 제한자를 적절히 사용함으로써 클래스 간의 결합도를 낮추고, 코드의 유지보수성과 안정성을 높일 수 있습니다.
 
코드로 예시를 들어 보겠습니다.
class Student { int grade; }
코드 1-1
Student라는 클래스를 만들고 그 안에 grade라는 정수형 변수를 선언했습니다. 이 때, grade 변수 앞에 접근 제한자를 명시하지 않았기 때문에 기본적으로 private 접근 제한자가 적용됩니다. private 접근 제한자는 해당 변수가 선언된 클래스 내부에서만 접근 가능하다는 것을 의미합니다. 그러면 Main 함수에서 Student 클래스의 인스턴스를 생성하고, 해당 인스턴스의 grade 변수에 값을 할당해 보겠습니다.
static void Main(string[] args) { Student student = new Student(); student.grade = 10; // 에러 }
위 코드를 실행하면 에러가 발생합니다. 그 이유는 Main 함수가 Student 클래스의 외부에 있기 때문입니다. private 접근 제한자로 인해 Student 클래스 내부에서만 grade 변수에 접근할 수 있습니다. 이처럼 접근 제한자는 클래스나 멤버의 접근 가능 범위를 제어하는 역할을 합니다.
 
 

접근 제한자의 종류

1) public

public은 접근 제한자 중 가장 개방적인 접근 권한을 제공합니다. public으로 선언된 클래스의 멤버(변수, 메서드 등)는 접근 제한이 걸려 있지 않아 해당 클래스의 내부와 외부 모두 자유롭게 접근하고 사용할 수 있습니다.
 
위에서 예시로 든 코드 1-1 public 키워드를 붙여 접근 제한자를 명시해 보겠습니다.
class Student { public int grade; void Func() { grade = 10; } }
이렇게 public으로 선언된 grade 변수는 Student 클래스 내부의 Func 메서드에서 직접 접근하여 값을 할당할 수 있습니다.
 
뿐만 아니라 Student 클래스 외부에서도 public 멤버에 접근할 수 있습니다. 아래 코드처럼 Main 메서드에서 Student 클래스의 인스턴스를 생성하고, 해당 인스턴스의 grade 변수에 값을 할당할 수 있습니다.
static void Main(string[] args) { Student student = new Student(); student.grade = 1; }
 
이처럼 public 접근 제한자를 사용하면 클래스 외부에서도 해당 멤버에 자유롭게 접근할 수 있어 편리합니다. 하지만 무분별한 public 사용은 캡슐화를 약화시키고 코드의 안정성을 해칠 수 있으므로, 필요한 경우에만 선택적으로 사용하는 것이 좋습니다.
 

2) protected

protected는 클래스 내부와 해당 클래스를 상속받은 파생 클래스에서만 접근할 수 있는 접근 제한자입니다. protected로 선언된 멤버는 클래스 외부에서 직접 접근할 수 없지만, 해당 클래스를 상속받은 파생 클래스 내부에서는 접근이 가능합니다.
아래 코드와 같이 Person 클래스를 정의하고, age 변수를 protected로 선언해 보겠습니다.
class Person { protected int age = 59; }
 
이제 Person 클래스를 상속받는 Student 클래스를 만들어 보겠습니다. 클래스 상속은 클래스 이름 뒤에 콜론(:)을 붙이고 상속받을 클래스의 이름을 명시하면 됩니다.
class Student : Person { void Func() { age = 1; } }
위 코드에서 Student 클래스는 Person 클래스를 상속받았습니다. 이때 Person 클래스를 부모 클래스 또는 기초 클래스라고 하며, Student 클래스를 자식 클래스 또는 파생 클래스라고 합니다. Student 클래스 내부의 Func 메서드에서는 부모 클래스인 Person의 protected 멤버 age에 접근하여 값을 변경할 수 있습니다. 즉, 파생 클래스에서 부모 클래스의 protected 멤버에 접근이 가능합니다. 그러나 아래 코드와 같이 클래스 외부에서 protected 멤버에 접근하려고 하면 컴파일 에러가 발생합니다.
static void Main(string[] args) { Person person = new Person(); person.age = 10; // 에러 }
protected 접근 제한자는 클래스 외부에서의 직접적인 접근을 제한하면서도 상속 관계에 있는 파생 클래스에서는 접근을 허용합니다. 이를 통해 부모 클래스의 내부 구현을 보호하면서도 파생 클래스에게 필요한 접근 권한을 제공할 수 있습니다.
 

3) private

private 접근 제한자는 클래스 내부에서만 접근할 수 있도록 제한합니다. private으로 선언된 멤버는 해당 클래스 외부에서는 직접 접근할 수 없습니다.
Student 클래스 내부에서 grade 변수를 private으로 선언해 보겠습니다.
class Student { private int grade; void Func() { grade = 1; } }
private으로 선언된 grade 변수는 Student 클래스 내부의 Func 메서드에서 접근하여 값을 할당할 수 있습니다. 즉, 클래스 내부에서는 private 멤버에 자유롭게 접근할 수 있습니다. 하지만 아래 코드와 같이 Student 클래스 외부에서 private 멤버인 grade에 접근하려고 하면 컴파일 에러가 발생합니다.
static void Main(string[] args) { Student student = new Student(); student.grade = 10; // 에러 }
private 접근 제한자는 클래스 외부에서의 직접적인 접근을 완전히 차단합니다. 이를 통해 클래스의 내부 구현을 캡슐화하고 외부에서의 잘못된 접근으로 인한 데이터 손상을 방지할 수 있습니다.
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 유니티 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 게임 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
 
CREDIT
글 | 김형수 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
Share article
Subscribe to our newsletter
RSSPowered by inblog