본문 바로가기
  • 불확실한 내일을 위해
유니티 C#/C#

C#기초 - 캡슐화와 접근수식자(접근제한자) public, private 등

by 그린초코 2023. 5. 10.

 

 

캡슐화(Encapsulation)

데이터를 캡슐화 한 것. 어떤 객체를 설명하기 위핸 필드와 메서드를 안데 모아 정의하고 외부에 공개할 멤버와 공개하지 않을 멤버를 구분한다. 객체의 속성, 행위를 각각 하나로 묶어 정의하면 구분과 유지보수하기 쉽다.

접근 제한자(Access modifier)

캡슐화를 이용해 어떻게 정보를 은닉하는지를 결정하는 키워드. 클래스 외부에 클래스 멤버를 공개할 것인지 공개하지 않을 것인지를 결정하는 키워드.

접근 제한자
설명
public
모든 외부에서 접근 가능 (외부 어셈블리, 외부 클래스, 파생 클래스, 클래스 내부)
internal
같은 어셈블리 내에서만 접근 가능 (외부 클래스, 파생 클래스, 클래스 내부)
protected
파생 클래스만 접근 가능 (파생 클래스, 클래스 내부)
private
외부에 공개하지 않음 (클래스 내부)

외부 프로젝트에서 접근하지 않는 이상 public과 intermal은 같은 의미라고 할 수 있다.

public 키워드

class 키워드 앞에 public 키워드가 등장하는 방식.

public 키워드가 붙은 클래스는 프로젝트 내의 다른 스크립트에서도 접근할 수 있다.

해당 클래스 외부에 공개하는 역할.

inspector 창에 접근하여 수정할 수 있다. 

public 키워드가 붙어도 접근하기 위해서는 부모클래스가 되어야 한다.

private 키워드

public과는 반대로 외부에 해당 요소를 공개하지 않는 것을 말한다. 

기본적으로 클래스 내 변수와 함수는 기본적으로 캡슐화에 의해 보호된 상태(private)상태다.

해당 클래스를 같은 프로젝트 내 다른 스크립트에서 접근할 수 없게 한다.

외부에 숨겨야 하는 민감한 데이터에 사용한다.

inspector 창에서 볼 수 없다.

만약 여기에 있는 클래스를 다른 스크립트에서 불러오려고 한다면 아래와 같은 에러가 뜬다.

['클래스 이름' is inaccessible due to its protection level]

protected 키워드

public은 클래스 외부에서도 해당 멤버로의 접근을 허용하고 private은 클래스 내부에서만 해당 멤버로 접근을 허용한다. protected는 외부에서 접근은 불가능 하지만 파생 클래스에만 접근을 허용하여 상속관계에서 사용이 가능하다. private에서 파생 클래스로부터의 접근을 허용하는 역할이 추가된 것이다.

접근 제한자(접근 수식자)의 생략

클래스와 멤버를 정의할 때 제한자를 생략할 수 있는데, 이 경우 클래스와 멤버는 다르게 동작한다.

멤버는 private 으로 접근 제한자가 설정되고 생략되고 클래스는 internal로 설정되어 해당 프로젝트 내 다른 스크립트에서 모두 접근할 수 있다

 

 

728x90

댓글