Development/C#
[제프리 리처의 CLR via C#] 공용 타입 시스템
오늘도 진이
2021. 2. 15. 14:55
목차
1부. CLR의 기본
1장. CLR의 실행 모델
공용 타입 시스템
- 타입은 여러분의 응용프로그램과 다른 타입들에 기능들을 제공한다.
- 타입이라고 하는 것은 한 프로그래밍 언어로 작성된 코드가 다른 프로그래밍 언어로 작성된 코드들과 소통하는 매커니즘이다.
- 타입은 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 - 이 멤버는 클래스 상속 관계 여부나 어셈블리 위치에 무관하게 접근 가능하다.
- System.Object 타입
- 두 인스턴스의 동일함을 판정한다.
- 인스턴스의 유일성을 보증하는 해시 값(Hash-code)을 가져온다.
- 인스턴스의 실제 타입을 조회한다.
- 인스턴스의 부분 복제(Shallow Copy)를 처리한다.
- 인스턴스 객체의 현재 상태를 설명하는 문자열 표현을 가져온다.
Uploaded by Notion2Tistory v1.1.0