접근제한자가 존재한다는 사실은 대부분 알고있지만 프로젝트와 같은
작업을 하지 않는 이상 쓸 기회가 없다. 마치 코딩 알고리즘 문제를 풀 때
굳이 접근제한자를 사용하지 않는 것과 같은 이유다. 그렇기 때문에 접근제한자의
종류와 차이점에 대해 설명하고자 한다.
1. public
public으로 선언된 것은 어떠한 곳에서든 제약을 받지 않고 사용할 수 있다.
접근이 쉬운만큼 남용하게 되면 독립적으로 될 수 없기 때문에 안좋은
코드가 될 수 있다.
2. private
private로 선언된 것은 해당 클래스 내에서만 접근이 가능하다.
반대로 말하자면 클래스 내를 제외한 모든 곳에서 접근이 불가능하다.
다른 클래스에 의해 사용되는 것을 방지하기 위해 주로 사용한다.
3. protected
protected로 선언된 것은 상속 받은 자식의 클래스에서만 사용 가능하다.
그렇기 때문에 상속가능한 기능으로 만들 경우엔 protected를 붙여서 사용한다.
ex) protected virtual ..
4. internal
internal로 선언한다면 같은 어셈블리 내에서는 public과 같은 기능을 하고
다른 어셈블리에서는 접근을 못하는 private와 같은 기능을 한다.
그리고 internal은 접근제한자를 아무것도 적지 않을 시 자동으로 적용되는
접근제한자다.
ex) void Method() == internal void Method()
여기서 어셈블리란 NET 런타임 환경에서 실행할 수 있는 코드를 말한다.
어셈블리는 namespace를 통해 구분한다.
ex) namespace Test1{
internal class..
}
namespace Test2{
}
Test1 과 Test2 는 다른 어셈블리
그렇기 때문에 Test2 namespace에서는 private처럼 Test1의 기능을 접근할 수없다.
반대로 Test1 namespace 안에서는 public 처럼 접근이 자유롭다.
요약
접근제한자의 종류로는 public, private, protected, internal이 존재하며
public은 어느곳에서나 접근 가능, private는 클래스 내에서만 접근 가능,
protected는 상속된 자식 클래스에서만 접근 가능, internal은 같은 어셈블리
내에서는 접근 가능하고, 다른 어셈블리에서는 접근이 불가능합니다.
+ internal 은 유니티에서 프로젝트 하나 자체가 어셈블리다.
접근제한자란 예약어를 사용해서 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다
'TIL > C#' 카테고리의 다른 글
[C#] 가비지 컬렉터 (0) | 2023.10.27 |
---|---|
[C#] Struct와 Class의 차이점 (0) | 2023.10.26 |
ref와 out의 차이점 (0) | 2023.10.24 |
[C#] 디버그를 효율적으로 하는 방법 (1) | 2023.10.17 |
C# Enumerable.Repeat (1) | 2023.09.08 |