일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 남아프리카
- Enough
- 그루지야
- 아름다운 풍경
- c#
- 위젯
- andrew ng
- 전 세계의 잊지 못할 명소들
- 4장
- Never
- 오늘일기
- Fear
- 아름다운 자연폭포
- Coursera
- 이탈리아
- Wiki
- Death
- 물이 만들어내는 전 세계의 아름다운 장관
- 8장
- 제프리 리처
- CLR via C#
- 무료
- 동물에 관한 매혹적인 사실
- 6장
- 3장
- 사진: 세계의 웅대한 산
- 장관을 이루는 세계 곳곳의 등대 사진
- ML
- 장관을 이루는 일몰과 일출
- 5장
- Today
- Total
목록CLR via C# (44)
오진이 블로그

목차 2부. 타입 설계 8장. 메서드 타입 생성자 2부. 타입 설계 8장. 메서드 타입 생성자 CLR은 타입 생성자(혹은 정적 생성자, 클래스 생성자, 타입 초기자 등으로로 불린다)를 지원한다. 인스턴스 생성자는 인스턴스의 초기 상태를 설정하기 위해서 사용되고, 타입 생성자는 타입의 초기 상태를 설정하기 위해서 사용하게 된다. 타입은 내부적으로 사용하는 기본 타입 생성자가 따로 없다. 만약 타입 생성자를 정의해야 하는 경우라면 타입당 하나만 정의할 수 있으며 매개변수를 가질 수 없다. static 키워드를 사용해서 정의해야 한다. 타입 생성자는 반드시 private이어야 하는데, C#이 자동으로 private을 붙여준다. 타입 생성자는 반드시 private으로 선언되어 다른 개발자들이 작성된 코드에 의하..

목차 2부. 타입 설계 8장. 메서드 인스턴스 생성자와 구조체 (값 타입) 2부. 타입 설계 8장. 메서드 인스턴스 생성자와 구조체 (값 타입) CLR에서는 값 타입의 인스턴스를 언제든 생성할 수 있도록 허용하고 있으므로, 이를 막을 방법이 없다. 이런 이유로 값 타입은 내부에 생성자를 정의할 필요가 없으며, C# 컴파일러에는 값 타입에 대해서는 매개변수가 없는 기본 생성자 코드를 생성하지 않는다. CLR은 값 타입에 대해서도 생성자를 정의할 수 있도록 허용하고 있다.

목차 2부. 타입 설계 8장. 메서드 인스턴스 생성자와 클래스 (참조 타입) 2부. 타입 설계 8장. 메서드 인스턴스 생성자와 클래스 (참조 타입) 생성자는 특별한 유형의 메서드로 타입의 인스턴스를 올바란 상태로 초기화하는 것을 돕는다. 생성자 메서드는 항상 .ctor이라는 이름으로 불리며, 이 이름으로 메서드 정의 메타데이터 테이블에 등록된다. 생성자에서 명시적으로 값을 설정하지 않은 필드들은 항상 0이나 null 값을 가지게 된다. 인스턴스 생성자는 상속되지 않는다. 클래스를 abstract로 선언하면, 컴파일러는 기본 생성자를 protected로 선언하며, 그렇지 않은 경우에는 public으로 선언된 것으로 간주한다. 클래스를 static으로 선언하면(sealed와 abstract의 조합으로 생각할..

목차 2부. 타입 설계상수 필드 7장. 상수와 필드 2부. 타입 설계 7장. 상수와 필드 상수 상수 - 절대 불변의 값에 대한 기호 상수 기호를 정의할 때에는 그 값이 반드시 컴파일 시점에서부터 알 수 있는 값이어야 한다. 컴파일러는 그 다음 상수의 값을 어셈블리의 메타데이터에 저장한다. 상수의 값에 사용할 수 있는 타입은 컴파일러의 입장에서 기본 타입으로 취급될 수 있는 것으로만 한정된다.(C#의 경우, Boolean, Char, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, String/C#은 기본 타입이 아닌 상수 변수에 대해 null을 지정하는 것을 허용) 상수 필드는 언제나 타입의 일부로 취급된..

2부. 타입 설계 6장. 타입과 멤버의 기본 컴포넌트, 다형성, 버전 관리 객체 지향 프로그래밍(Object Oriented Programming, OOP)은 정말 많은 세월 동안 논의되어온 개념이다. 1970년대 후반에서 1980년대 초반까지 객체 지향 프로그래밍을 처음 도입할 떄에는 응용프로그램의 크기는 지금보다 더 작았고 응용프로그램의 제작을 위하여 코드를 작성하는 개발자들은 모두 한 회사 소속이었다. 오늘날 소프트웨어는 더욱 더 복잡해지고 있고 사용자들은 응용프로그램이 제공하는 그래픽 사용자 인터페이스(Graphic User Interface, GUI)와 메뉴 항목, 마우스 입력, 태블릿 입력, 프린터 출력, 네트워킹 등 수많은 기능들에 의존하고 있다. 이러한 이유로, 우리가 사용하는 운영체제와 ..

2부. 타입 설계 6장. 타입과 멤버의 기본 부분 클래스, 부분 구조체, 부분 인터페이스 부분 클래스, 구조체, 인터페이스에 대해서 살펴볼 것이다. partial 키워드를 사용하면 한 소스 코드 파일 내에서 여러 조각으로 타입의 선언을 분할하거나 여러 소스 코드 파일에 걸쳐 여러 조각으로 타입의 선언을 분할할 수 있게 하고 나중에 컴파일 단계에서 C# 컴파일러가 이를 하나로 통합하여 컴파일하게 되므로 CLR은 완성된 타입 정의 위에서 작업할 수 있도록 해준다. 여러 조각으로 선언을 분할하는지 그 이유를 살펴보면 대개 다음의 이유 때문인 경우가 많다. 소스코드 제어 클래스, 구조체, 인터페이스를 단일 파일 내에서 논리적으로 여러 개로 분할하여 선언하기 코드 분할 partial 키워드는 타입의 종류와 무관하..
목차2부. 타입 설계6장. 타입과 멤버의 기본정적 클래스2부. 타입 설계6장. 타입과 멤버의 기본정적 클래스C#에서는 이런 성격의 클래스를 정의하기 위한 목적으로 static 키워드를 사용하여 클래스를 선언할 수 있게 기능을 제공하고 있다.정적 클래스로 선언하면 컴파일러는 다음의 사항들을 제한한다.정적 클래스는 반드시 System.Object에서만 상속을 받도록 제한되는데 상속은 기본적으로 객체에 대해서만 정의될 수 있고, 한 단계 이상 진행되는 다른 모든 상속 타입들의 경우 상속이 가능하다고 해도 인스턴스로 만들 수 없는 이 타입에 대해 특별한 의미를 가지지 못하기 때문에 이를 제한하고 있다.정적 클래스는 인터페이스를 구현할 수 없도록 제한되는데 인터페이스 메서드는 반드시 클래스의 인스턴스로 생선될 때..
목차2부. 타입 설계6장. 타입과 멤버의 기본멤버 접근성2부. 타입 설계6장. 타입과 멤버의 기본멤버 접근성멤버의 접근성은 해당 멤버와 타입을 참조하는 코드가 정상적으로 어느 영역까지를 참조할 수 있는지를 결정하는 기준이 된다.IL 코드를 검증함으로써 참조하는 멤버의 접근성이 설령 컴파일러 수준에서 접근성에 대한 점검이 누락되었다고 할지라도 실행 중에 이를 검사하므로 기능성을 보장받을 수 있다.C#에서는 선언하는 멤버에 명시적으로 한정자를 지정하지 않을 경우, 컴파일러는 모든 경우는 아니지만 대개 private 한정자를 자동으로 선택하여 적용하게 된다.상속받은 타입에서 기본 타입에 선언된 멤버를 재정의하는 경우, 컴파일러는 원래의 멤버를 필요로 하며 재정의하는 멤버의 기본 접근성을 그대로 가져온다.이렇게..