본문 바로가기

Programing/C#

(3)
[Effective C#] 아이템3: 캐스트보다는 is, as가 좋다 형변환을 수행하는 경우 캐스팅을 사용하기보다 as 연산자를 사용하는 것이 좋다. as를 사용하는 편이 더 안전하기도 하거니와 런타임에 더 효율적으로 동작한다. 다만 as나 is 연산자를 사용하면 사용자 정의 형변환은 수행되지 않는다. as 연산자와 캐스팅의 가장 큰 차이는 사용자 정의 형변환을 어떻게 다루는가 하는 점이다. as나 is 연산자는 런타임에 객체의 타입을 확인하고 필요에 따라 박싱을 수행하는 것을 제외하고는 어떠한 작업도 수행하지 않는다. 임의의 객체를 다른 타입으로 형변환하려면 이 객체는 지정한 타입이거나 혹은 지정한 타입을 상속한 타입이어야 한다. 그 외의 경우는 모두 실패한다. 반면 캐스팅을 사용하는 경우에는 객체를 지정한 타입으로 변환하기 위해서 형변환 연산자가 개입될 수 있다.
[Effective C#] 아이템2: const보다는 readonly가 좋다 컴파일타임 상수보다는 런타임 상수를 사용하라. 컴파일타임 상수가 약간 더 빠르긴 하지만 런타임 상수에 비해 유연성이 상당히 떨어진다. 컴파일타임 상수는 성능이 매우 중요하고 상수의 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하는 것이 좋다. 컴파일타임 상수와 비교되는 런타임 상수의 가장 중요한 차이는 상수의 값이 런타임에 평가된다는 점일 것이다. 런타임 상수를 참조하는 코드를 컴파일하면 컴파일타임 상수처럼 코드를 값으로 대체하지 않고, readonly 변수에 대한 참조 코드를 생성한다. 이러한 차이로 인해 간혹 호환성 문제가 발생하곤 한다. Infrastructure라는 어셈블리 내에 const와 readonly 필드를 다음과 같이 정의했다고 하자.public class UsefulValues{ ..
[Effective C#] 아이템1: 지역변수를 선언할 때는 var를 사용하는 것이 낫다 코드를 읽을 때 타입을 명시적으로 드러내야 하는 경우가 아니라면 var를 사용하는 것이 좋다. C# 언어가 익명 타입을 지원하기 위해서 타입을 암시적으로 선언할 수 있는 손쉬운 방법을 제공할 뿐만 아니라, 정확한 반환 타입을 알지 못한 채 올바르지 않은 타입을 명시적으로 지정하게 되면 득보다 실이 많기 때문이다. 예를 들어 IQueryable 컬렉션을 IEnumerable로 강제 형변환하게 되면 IQueryProvider가 제공하는 장점을 모두 잃게 된다. var f = GetMagicNumber();var total = 100 * f / 6; 다만 내장 숫자 타입을 선언할 때는 명시적으로 타입을 선언하는 편이 낫다.관련해서 위 코드를 보면, 컴파일러는 GetMagicNumber() 메서드의 반환 타입으..