목차
6장. 타입과 멤버의 기본
서로 다른 종류의 타입 멤버들
- 어떤 타입에는 멤버가 하나도 없거나 다음에 해당하는 멤버가 하나 이상 들어있을 수 있다고 하였다.
- 상수 : 상수는 절대불변의 데이터 값을 식별하는 기호다. 이러한 상수들은 코드를 더 알기 쉽고 유지보수하기 편리하도록 만드는 데 보통 활용된다. 상수들은 항상 타입과 관계를 가지게 되며, 타입의 인스턴스와는 무관하다. 논리적으로는 상수는 항상 정적 멤버다.
- 필드 : 필드는 읽기 전용 또는 읽기/쓰기 겸용 데이터 값에 대한 표현이다. 필드는 타입의 상태를 정의하기 위하여 정적 멤버로 선언될 수 있다. 뿐만 아니라 인스턴스의 상태를 정의하기 위한 목적으로 인스턴스 멤버(혹은 비정적 멤버)로 선언될 수도 있다. 가능한 필드는 private 접근자로 선언하여 타입 외부에서 임의로 객체의 상태에서 데이터를 변경하여 훼손하는 일이 없도록 만들어야 한다.
- 인스턴스 생성자 : 인스턴스 생성자는 객체의 인스턴스 필드를 의도하는 대로 초기화하기 위한 목적으로 선언할 수 있는 특별한 메서드다.
- 타입 생성자 : 타입 생성자는 타입의 정적 필드들을 의도하는 대로 초기화하기 위한 목적으로 선언할 수 있는 특별한 메서드다.
- 메서드 : 멤버로 추가할 수 있는 함수로, 특정한 타입에 대한 상태를 변경하기 위하여 정적 메서드를 선언하거나 특정한 인스턴스에 대한 상태를 변경하기 위하여 인스턴스 메서드로 선언할 수 있다. 메서드는 타입이나 객체의 필드를 변경할 수 있다.
- 연산자 오버로드 : 연산자 오버로드는 서로 다른 두 객체에 대해 조작하는 방법을 정의하는 메서드다. 모든 프로그래밍 언어들이 연산자 오버로드를 지원하는 것은 아니기 때문에, 연산자 오버로드는 공용 언어 사양(CLS)에 포함되지 않는다.
- 변환 연산자 : 변환 연산자는 암묵적 (또는) 명시적으로 어떤 객체를 다른 객체 타입으로 변환할 수 있는 방법을 정의하는 메서드다. 연산자 오버로드와 마찬가지로 모든 프로그래밍 언어가 변환 연산자를 지원하는 것은 아니기 때문에, 공용 언어 사양에 포함되지는 않는다.
- 속성 : 속성은 필드와 비슷한 문법을 사용하여 타입 내의 필드를 변경하거나 상태를 조회하기 위한 정적 속성, 객체 내의 필드를 변경하거나 상태를 조회하기 위한 인스턴스 속성으로 나눌 수 있다. 이때 속성으로 인해서 타입이나 객체의 상태가 훼손되지 않아야 한다. 속성은 파라미터 없이 호출할 수 있는 것이 제일 보편적이며, 컬렉션 클래스와 함께 사용되는 인덱서와 같이 매개변수를 받아들일 수 있는 속성도 지원한다.
- 이벤트 : 정적 이벤트와 인스턴스 (비정적) 이벤트는 특정한 타입이 다른 정적 메서드 또는 인스턴스 메서드로 통지를 보낼 수 있는 방법을 제공한다. 이벤트는 보통 타입이나 객체의 상태가 변경될 떄 이를 통지받을 수 있도록 할 때 선언하여 기능을 제공할 수 있다. 정적 이벤트와 인스턴스 이벤트는 이벤트 통지를 받을 메서드를 등록하거나 해지할 수 있는 두 개의 함수로 구성되어 있다. 더 나아가서 두 개의 메서드 외에 이벤트는 보통 델리게이트 필드를 사용하여 등록된 메서드들의 목록을 관리하게 된다.
- 타입 : 타입 안에 또 다른 타입을 중첩해서 선언할 수도 있다. 이렇게 하는 이유는 복잡하고 규모가 큰 타입을 작은 빌딜 블록 단위로 분해하여 단순화하기 위해서다.
- 여러분이 어떤 프로그래밍 언어를 사용하든지에 관계없이, 컴파일러는 반드시 소스 코드를 처리하면서 앞에서 열거한 멤버들의 종류별로 알맞은 메타데이터와 IL 코드를 생성해야만 한다.
- 메타데이터와 타입을 원본 프로그래밍 언어로 무엇을 사용하였든 간에 동일해야 하고, 모든 기능들은 CLR이 제공하는 기능 안에서 동작해야만 한다. 메타데이터는 모든 프로그래밍 언어들이 공동으로 만들어내고, 사용하여 프로그래밍 언어 사이에 코드를 경계 없이 완전히 자유롭게 사용할 수 있도록 해준다.
Uploaded by Notion2Tistory v1.1.0