데이터의 형 변환이란
말 그대로 데이터의 형식을 변환하는 것.
-사용자 정의 변환 : 기본 클래스-파생 클래스 관계가 없는 사용자 지정 형식 간의 명시적 및 암시적 변환
-암시적 변환: 따로 변환 명령처리를 하지 않아도 자동적으로 변환되는 것
(ex: long타입은 int의 값을 그대로 저장할 수 있다.)

-캐스트(명시적 변환) : 데이터의 명시적 형 변환.
변환을 실패하면 컴파일 오류가 나고 예외를 던질 수 있다.
try catch 문을 사용해 보완할 수 있다.

-as: 객체를 형 변환 할 떼 사용되는 키워드.
캐스팅에 성공하면 그 결과를 반환,실패하면 null 값을 반환.
(결과를 지정된 참조 또는 nullable 값 형식으로 명시적으로 변환한다.)
as 연산자는 참조, nullable, boxing 및 unboxing 변환만 고려한 다.
as 연산자를 사용하여 사용자 정의 변환을 수행할 수는 없다.

*int 는 null 될 수 없기 때문.

*nullable 형 변환을 수행하는 것으로 보완할 수 있다.
-is: 객체를 형 변환 할 수 있는지 참 또는 거짓 값을 반환하는 키워드.
그 객체가 어떤 객체의 하위타입일 경우에도 true를 반환한다.
결론:
컴파일러는 런타임시 변환이 올바른지 판단할 수 없다.
as는 객체가 지정 타입이거나 지정한 타입을 상속할 경우에만 가능하다.
캐스팅은 형식변환에 있어 형 변환 연산자가 개입될 수 있다.
그래서 as가 일관성 있는 결과를 반환한다.
그렇다고 해도
캐스팅과 as의 동작 과정을 이해하는 것이 중요하다.(개인적 생각)
'C# > 이펙티브 C#' 카테고리의 다른 글
| 아이템7. 델리게이트를 이용하여 콜백을 표현하라. (0) | 2023.06.25 |
|---|---|
| 아이템6.nameof 연산자를 적극 활용하라. (0) | 2023.06.24 |
| 아이템5.문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라. (0) | 2023.06.23 |
| 아이템4. string.Format()을 보간 문자열로 대체하라. (0) | 2023.06.21 |
| 아이템 1. 지역변수를 선언할 때는 var를 사용하는 것이 낫다. (0) | 2023.06.15 |