C#/이펙티브 C#

아이템3. 캐스팅보다는 is,as가 좋다.

공부를하자 2023. 6. 18. 15:38

데이터의 변환이란

그대로 데이터의 형식을 변환하는 .

 

 -사용자 정의 변환 : 기본 클래스-파생 클래스 관계가 없는 사용자 지정 형식 간의 명시적 및 암시적 변환

  -암시적 변환: 따로 변환 명령처리를 하지 않아도 자동적으로 변환되는

   (ex: long타입은 int 값을 그대로 저장할 있다.)

 -캐스트(명시적 변환) : 데이터의 명시적 변환.

              변환을 실패하면 컴파일 오류가 나고 예외를 던질 있다.

              try catch 문을 사용해 보완할 있다.

 -as: 객체를 변환 사용되는 키워드. 

       캐스팅에 성공하면 결과를 반환,실패하면 null 값을 반환.

       (결과를 지정된 참조 또는 nullable 값 형식으로 명시적으로 변환한다.)

        as 연산자는 참조, nullable, boxing 및 unboxing 변환만 고려한 다.

        as 연산자를 사용하여 사용자 정의 변환을 수행할 수는 없다.

 

 

       *int null 없기 때문.

      

       *nullable 변환을 수행하는 것으로 보완할 있다.

 

 -is:  객체를 변환 있는지 또는 거짓 값을 반환하는 키워드.

      객체가 어떤 객체의 하위타입일 경우에도 true 반환한다.

 

결론:

 컴파일러는 런타임시 변환이 올바른지 판단할 없다.

 as 객체가 지정 타입이거나 지정한 타입을 상속할 경우에만 가능하다.

 캐스팅은 형식변환에 있어 변환 연산자가 개입될 있다.

 그래서  as 일관성 있는 결과를 반환한다.

 그렇다고 해도

 캐스팅과 as 동작 과정을 이해하는 것이 중요하다.(개인적 생각)