- public , private 은 똑같으니 생략.
- protected 상속 클래스 및 선언 클래스에서만 접근 가능.
- 선언 클래스는 선언된 클래스라는 말이다
예를 들어
class A {
protected int a =3;
}
public static void Main(){
A in = new A();
int b = in.a; // 여기서 in은 A 클래스의 인스턴스다. 선언된 클래스라는 말이다.
}
- internal : 내부적인 이라는 사전적 의미 .
internal 접근자가 지정된 변수, 형식은 선언된 *어셈블리 내에서만 접근이 가능하다.
쉽게 말해 같은 프로젝트 파일에서 접근이 가능하다는 소리이다.
.NET 에서 어셈블리란? ▼
NET 런타임 환경에서 실행할 수있는 (사전 컴파일 된) 코드 덩어리이다.
NET 프로그램은 하나 이상의 어셈블리로 구성된다.
어셈블리는 .net 응용 프로그램의 가장 작은 배포 단위이다.
dll 또는 exe 으로 주로 두 가지 유형이 있다.
- 개인 어셈블리 :
한 응용 프로그램의 유일한 속성 인 dll 또는 exe . 일반적으로 응용 프로그램 루트 폴더에 저장된다. - 공용 / 공유 어셈블리 :
한 번에 여러 응용 프로그램에서 사용할 수있는 dll. 공유 어셈블리는 GAC, 즉 Global Assembly Cache에 저된다.
namespace 를 통해 구분된다.
컴파일 하면은 namespace이름.exe 라고 나온다 = 어셈블리
/* Assembly: TestApp0 */
namespace TestApp0 {
internal static class InternalClass {
internal static Int32 InternalMethod() {
return 777;
}
}
public class TestClass {
public static Int32 TestMethod() {
/* 같은 어셈블리이므로 접근이 가능함 */
return InternalClass.InternalMethod();
}
}
}
/* Assembly: TestApp1 */
namespace TestApp1 {
public class TestClass {
public static Int32 TestMethod() {
// InternalClass 에 접근 불가,
// 서로 다른 어셈블리임
TestApp0.InternalClass ic;
}
}
}
[ 접근 제한자 요약 테이블 ]
C# 프로그램에서 컴파일을 통해서 만들 수 있는 파일은 exe와 dll 형태의 파일이고,
exe 는 Main() 메서드를 포함하는( 진입점)을 반드시 포함하는 형태이다.
dll 은 반대로 진입점이 없는 형태이다.
컴파일을 통해 나온 결과 파일을 C# 에서는 어셈블리(Assembly) 라고 부른다.
dll 이든 exe든 우선 컴파일되서 나온다면 어셈블리인것이다.
HelloWorld.cs 를 컴파일하여 만들어진 HelloWorld.exe 또한 어셈블리가 되고 어셈블리 내에 있는 클래스들은 namespace를 통해서 구분하게 된다.
추가)
그렇다면 왜 Main() 메서드가 static으로 되어 있을까요? 그리고 왜 Main() 메서드가 클래스의 외부에 있는 것으로 생각하라고 했을까요? C#에서 Main() 메서드를 실행할 때 CLR에서 실행 클래스의 객체가 생성되기 전에 접근해야 하기 때문에 static으로 선언 되어 있는 것입니다. static 멤버 메서드의 접근은 객체의 생성과 전혀 상관이 없습니다. 만약, 해당 클래스가 Main() 메서드를 포함하고 있고 해당 클래스를 실행하면 CLR에서는 static Main() 메서드를 찾게 됩니다. 이 Main() 메서드에 접근하는 기법은 당연히 static의 기법을 사용하고 있는 것입니다.
참조 ::
Reference :: https://cafe.daum.net/csharp-novice/5ijJ/48?listURI=%2Fcsharp-novice%2F5ijJ
https://cafe.daum.net/csharp-novice/5ijJ/51?listURI=%2Fcsharp-novice%2F5ijJ
https://m.cafe.daum.net/csharp-novice/5ijJ/65?listURI=%2Fcsharp-novice%2F5ijJ
'Language & etc > C#' 카테고리의 다른 글
readonly vs const (0) | 2022.02.15 |
---|---|
[ C# ] this keyword (0) | 2022.01.11 |
[C#] .NET FrameWork( 닷넷 프레임워크) 이란 무엇인가? (0) | 2022.01.06 |