2014. 12. 28. 00:12ㆍIT Books/시작하세요 C# 프로그래밍
?? 연산자
if, else나 3항 연산자인 ? : 를 사용할 필요없이
모 아니면 도로 사용할 수 있게 해주는
default 예약어
C#에서 변수를 명시적으로 초기화 하지 않았을 때
값형식은 0
참조형식은 null로 초기화 된다.
이렇게 미리 형식을 알고 있다면 초기화가 가능하겠지만
제네릭을 쓸 때는 미리 타입을 알 수 없으므로 뭔가 대책이 필요하다.
이때 default예약어를 쓰는데
default(T) 형식으로 쓴다.
yield return / break
배열과 List<T>등에 담긴 요소를 foreach로 순회할 수 있는 이유는 이들이
IEnumerable, IEnumerator 인터페이스를 구현하기 때문이다.
yield를 이용하여 이를 좀 더 단순하게 만들 수 있다.
yield return을 만나면 실행이 중지되는 것처럼 생각되지만 실제로는 그렇지 않고
컴파일시 단순 리턴 / 콜 코드로 치환해서 처리하게 되어 있다고 한다.
즉 yield는 IEnumerable, IEnumerator 로 구현한 코드에 대한 간편 표기 구문이다.
partial
이 예약어를 이용하여 동일한 클래스를 여러 파일로 나눌 수 있다.
partial class Person
으로 사용.
C# 컴파일러는 빌드 시에 같은 프로젝트에 있는 partial클래스를 모아 단일 클래스로 빌드한다.
nullable 형식
왜 이런 형식이 필요한지 알아야 한다.
일반적으로 값 형식은 초기값이 0으로 채워진다.
문제는 이 초기값이 정말 0인 숫자를 가진건지, 값이 없는 상태인지 구분 할 수 없다는 것이다.
예를 들어 어떤 웹 사이트의 회원 가입란에 결혼 여부를 묻는 란이 있는데
유저는 예 / 아니오만 선택할 수 있는게 아니라
입력 자체를 안 할 수도 있다.
즉 bool 타입으로는 예 / 아니오 / 미정을 표현 할 수 없는 것이다.
모든 값형식에서 이런 문제가 발생한다.
하지만 참조 형식는 null로 [미정]을 표현할 수 있다.
이때 Nullable<T> 타입이 값 형식에 대해 null 표현이 가능하게 하는 역할 을 한다.
익명 메서드
이름이 없는 메서드.
델리게이트에 전달되는 메서드가 일회성으로만 필요할 때 사용.
익명메서드를 이용해서 직접 필요한 곳에 군더더기 없이 전달할 수 있다.
쓰레드의 생성자에 delegate예약어를 사용해 코드만을 전달한다.
이 코드는 익명 메서드를 delegate타입의 변수에 담아 사용한 것이다.
익명메서드를 잘 써주면 코드를 깔끔하게 유지할 수 있는데
컴파일러는 익명 메서드가 사용되면 빌드 시점에
중복이 되지 않을 문자열을 생성하여 메서드의 이름으로 사용하고 delegate 예약어 다음의 코드를 분리하여
해당 메서드의 본체로 넣어준다.
즉 문법적으로 간편표기인 것이다.
정적 클래스
클래스의 정의에 static 예약어가 사용되면
정적 클래스가 됨.
정적 클래스는 오직 정적 멤버만 포함 가능함.
BCL에서는 System.Math 타입이 정적 클래스의 대표적인 예.
즉 정적 클래스로 선언하는 이유는 인스턴스 멤버를 포함할 필요 없음을 명시적으로 알리는 것.
'IT Books > 시작하세요 C# 프로그래밍' 카테고리의 다른 글
8장 - c# 3.0 - 2 (0) | 2015.01.10 |
---|---|
8장 - C# 3.0 - 1 (0) | 2015.01.06 |
7장 - c#2.0 - 제네릭 (0) | 2014.12.25 |
6장 - 리플렉션2 (확장모듈 만들어보기) (0) | 2014.12.24 |
6장 - 리플렉션1 (1) | 2014.12.21 |