Purpose-built post

이 포스트는 "Effective C#, Item #3, cast보다는 is나 as가 좋다"를 읽고 개인적인 생각을 정리하기 위한 용도로 만들었다. - 익필

Content

제목에서 말해 주듯, type을 변환 할 땐 cast 보다는 is 나 as를 써서 변환하는게 더 좋다 설명한 장이다. cast, is, as 에 대해서 문법 적으로 알고 있어야 하는데, 간단하게 정리해 본다.

1. 무엇을 cast 연산자 라고 하는가?

C 형태의 캐스트를 말한다. 예를 들어 다음과 같다.

2. 무엇을 is 연산자 라고 하는가?

is 연산자는 타입이 변환 될 수 있다/없다를 판단하기 위해서 사용 된다, is 연산자의 리턴값은 true/false 이다. 코드는 링크를 보자.

참조 링크

3. 무엇을 as 연산자 라고 하는가?

as 연산자는 타입을 변환 시키기 위해 사용 되며, 만약 변환이 안된다면, null 을 리턴한다.

참조 링크


cast 연산자들이 무엇이며, 어떻게 쓰이는지 알아 봤는다. 그렇다면 왜 이 책에선 C 스타일 보다 as 나 is 가 더 좋다고 하는 것일까? 책 내용을 정리하자면 다음과 같다.

이유 1. cast 연산시 코드 길이가 짦아져, 작성하기 편하고 읽기도 쉽다.

코드를 보면, as 사용 전 후를 확인해 볼 수 있을 것이다. c 스타일의 경우, try ~ catch 를 null 체크를 하여도 써야 하지만 as 는 쓰지 않아도 되는 장점이 있다.

이유 2. c 스타일 보다 as 가 더 빠르다.

as 와 is의 경우, 사용자가 정의한 "형변환 연산자"를 고려 하지 않기 때문에, 더 빠르다.(책에 이렇게 나와 있다.)

이유 3. 일관되게 동작하는 cast를 만들 수 있다.

여기서 "일관되게 동작하는게 좋다"를 알아야 하는데, 쉽게 말해, 예측이 가능하기 때문이다. 왜 일관 될까? c 스타일 cast 연산자의 경우, 사용자가 정의한 형변환을 고려 하기 때문에, 변환시 "사용자 정의 형변환 연산자"가 있느냐 없느냐에 따라서 바뀌지만, as 연산자는 고려하지 않기 때문이다.

사설 : 이것은 약간 이상하다. 무엇이 이상하냐면, 일관된다는 것에 관계 없이, 형변환 한다는 것 자체가, 변환이 실패 할 수도 있다는 것을 전제 하기 때문에, 타입 변환이 안될 경우에 대해서, 무조건 처리를 해 두어야 하기 때문에, 일관성과 관계가 없다.


그렇다고 모두 as를 쓸 수는 없다.

왜냐하면 as를 쓰지 못할 경우가 있기 때문이다. as는 value 타입에 대한 형변환을 수행 할 경우이다. 이때는 is 와 혼합을 하여 c 스타일 cast 를 해야 한다. 또 foreach 를 사용 할 때는 내부적으로 c 스타일 cast를 이용한다. 왜냐하면, value 와 reference 타입 둘다 형 변환을 해야 하기 때문이다.

is 와 혼합하여 value 타입을 변환 하는 방법

Digression

  • C# 에서 사용자 정의 형변환 연산자는 적용 할만한 곳이 적다. 는 것을 알았다. 왜 적냐면, object 타입일 경우, 사용자 정의 형변환 연산자가 무엇인지 컴파일러가 알 길이 없기 때문이다.

  • 이번 아이템 마지막 부근에 GetType() 에 대해서 언급 하지만, 아는게 귀찮아서 그냥 넘긴다. 왜 귀찮냐면, 아이템 9에서 자세히 다룬다고 하기 때문이다.


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기