7장 - c#2.0 - 그외

2014. 12. 28. 00:12IT 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 표현이 가능하게 하는 역할 을 한다.

 
? 문자는 컴파일러가  자동으로 Nullable<T>로 변경해 주는 역할을 한다.



익명 메서드


이름이 없는 메서드.

델리게이트에 전달되는 메서드가  일회성으로만 필요할 때 사용.


Thread 타입의 생성자는 기본적으로 쓰레드 실행 함수를 delegate로 전달받는다.

익명메서드를 이용해서 직접 필요한 곳에 군더더기 없이 전달할 수 있다.

쓰레드의 생성자에 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