타입이라고 하는 것은 한 프로그래밍 언어로 작성된 코드가 다른 프로그래밍 언어로 작성된 코드들과 소통하는 매커니즘이다.
타입은 CLR에서 가장 상위에 존재하는 개념으로, 마이크로소프트는 이것을 공용 타입 시스템(Common Type System, CTS)이라는 표준으로 정의하여 타입이 어떻게 정의되어야 하고 어떻게 동작해야 하는지를 규정
멤버
필드 - 객체의 상태를 정의하는 데이터 변수다. 필드는 이름과 타입으로 구분된다.
메서드 - 객체에 대하여 작업을 하는 함수이며, 객체의 상태를 변경하는 목적으로 주로 사용된다.
속성 - 호출하는 쪽에서 보면 마치 필드처럼 보인다. 그러나 속성(property)을 구현하는 쪽에서 보면 한 개 또는 두 개의 메서드로 구성된다. 속성은 구현하는 쪽에서 입력 매개변수나 객체의 상태를 점검할 수 있도록 해주고, 필요 시 값을 계산할 수 있게 해준다. 그리고 사용자들이 간소화된 문법을 사용할 수 있도록 도움을 준다. 최종적으로 속성은 읽기 전용이거나 쓰게 전용으로만 작동하는 필드를 구현할 수 있도록 해준다.
이벤트 - 이벤트는 어떤 객체와 연관 짓고자 하는 다른 객체 사이의 통지 메커니즘이 작동할 수 있도록 해준다. 예를 들어 버튼은 다른 객체에게 버튼이 눌린 사실을 통지하는 이벤트를 제공할 수 있다.
한정자
Private - 이 한정자가 지정된 멤버는 같은 클래스 타입 내의 다른 멤버들에서만 접근이 가능하도록 제한된다.
Family - 이 한정자가 지정된 멤버는 어셈블리 내부/외부에 무관하게 현재 멤버가 선언된 클래스를 상속받은 자식 클래스에 대해 접근이 가능하도록 열여준다. C++과 C#을 비롯한 많은 언어들의 경우 이 한정자를 protected라고 부른다.
Family and Assembly - 앞의 Family 한정자와 같이 현재 멤버가 선언된 클래스를 상속받은 자식 클래스에 대해 접근이 가능한 것은 같지만, 같은 어셈블리 안에 들어가는 클래스에 대해서만 접근이 허용된다. C#과 Visual Basic .NET을 비롯한 많은 언어들이 이 한정자에 대응되는 기능을 지원하지 않는다. 물론 IL 어셈블리에서는 이를 사용할 수 있다.
Assembly - 같은 어셈블리 안에 포함된 코드이기만 하면 자유롭게 접근할 수 있다. 많은 프로그래밍 언어들이 이를 internal로 표현한다.
Family or assembly - 앞의 Family 한정자와 같이 어셈블리 안이나 밖의 구분 없이 상속 관계에 있으며 자유롭게 접근할 수 있다는 것은 동일하다. 여기에 같은 어셈블리 안에 있는 코드는 상속 관계 밖이라도 이 한정자로 선언된 멤버에 접근이 가능하다.
Public - 이 멤버는 클래스 상속 관계 여부나 어셈블리 위치에 무관하게 접근 가능하다.
Uploaded by Notion2Tistory v1.1.0