안녕하세요 삽잡이입니다.
이번 시간에는 사용자 정의 타입 변환에 대해 알아보는 시간을 가지려고 합니다.
여러분은 형변환에 대해서 들어보신적이 있으십니까?
int형에서 double, double에서 int
int형에서 string, string에서 int형 이처럼 말입니다.
C#에서 제공하는 기능 중
우리가 정의를 하지 않아도 되는 변환이 되는 경우는 크게 두 가지입니다.
우선, '수치 형식 간의 변환'은 기본적으로 제공해줍니다.
이는 위에서 든 예시와 같이 정수에서 실수 혹은, 실수에서 정수로 변환하는 기능입니다.
그리고, '부모 자식간의 형식 변환'도 제공을 해주지요.
그런데,
실생활에서 말이 안되는 변환이 객체지향에서는 정의를 통해 변환이 가능해집니다.
예를 들어 모기를 곰으로 형변환 한다던지...
허허... 실생활에서는 말이 안되지만 객체지향 세계에서는 가능하다는 것입니다.
어떻게? 바로 사용자 정의 형식 변환만 만들어주면 말입니다.
이 형식 변환에는 암시적(implicit), 명시적(explicit) 변환 이렇게 두 가지가 있습니다.
어떤 형식을 어떤 형태로 변환하는 것은 이전에 배운 형식 변환가 다를 것이 없습니다.
우선, 명시적인 형변환을 할 때에는 explicit 키워드를 사용합니다.
닷넷에서는 무조건 static 멤버로만 타입 변환을 만들 수 있습니다.
explicit 키워드를 통해서 명시적인 형식 변환을 결정하게 되는 것입니다.
형식 변환 연산자에서 return 타입은 없습니다.
return 타입이 없다는 것을 주의하셔야합니다.
왜냐, 무조건 해당 형식으로만 변환이 가능해야함으로 return 타입이 없는 것입니다.
형변환을 할 타입만을 반환시켜야하기 때문에 return 타입이 없는 것입니다.
예를 들어 Point라는 클래스 타입을 변환시키려 하더라도,
object는 Point의 부모로써 공변성에 의해서 혹여나 타입 변환에 대한 확실한 보장을 할 수 없습니다.
따라서 return 타입 자체를 명시하지 않는 것이지요.
바로 그 바꾸고자하는 타입만을 변환시키기 위해서이지요.
int 형식 처럼 기본적으로 제공해주는 형식과
사용자가 정의한 static 멤버 또한 형식 변환이 가능합니다.
즉, int형식을 받아서 형식 변환이 가능하다는 소리입니다.
int 형식을 뜯어 고칠 수는 없지만, 변환은 가능하다는 것인데 같이 알아보도록 하겠습니다.
참고로 int와 같은 형식도 엄연히 static 형식이지요...
사용자 정의 변환은 우리가 코드를 잘못 작성하지 않는 이상 어떤 타입이든 변환하던
컴파일러는 신경쓰지 않는 다는 사실을 알게됬습니다.
그렇다면 암시적 형변환은 어떻게 정의 될까요?
암묵적으로는 implicit 키워드만 붙이면 끝입니다.
그런데 사실 자동으로 형변환하는데 별로 좋은 케이스는 아닙니다.
자동으로 형변환을 하게될 경우 오히려 오류율만 커질 수 있습니다.
implicit 키워드를 사용하는 것도 기존의 명시적 변환가 차이가 없습니다.
사용자 정의 형식 변환을 할 때에는 두가지가 필요합니다.
우선, 정적 메서드(static)을 만들어야합니다.
그리고, implicit, explicit 이 키워드 중 하나를 결정하면 됩니다.
마지막으로 변환하고자하는 형식을 인수로 받으면 됩니다.
이번 시간은 여기까지 알아보도록 하겠습니다!
이상 삽잡이였습니다!
'삽질의 현장 > - .NET' 카테고리의 다른 글
#062_닷넷(.NET)_.Net Framework 기본 - 부분 클래스(partial class) (0) | 2015.11.05 |
---|---|
#061_닷넷(.NET)_.Net Framework 기본 - 확장 메서드 (0) | 2015.11.05 |
#059_닷넷(.NET)_.Net Framework 기본 - 연산자 오버로딩` (0) | 2015.11.05 |
#058_닷넷(.NET)_.Net Framework 기본 - 인덱서 메서드 (0) | 2015.11.05 |
[삽잡이::C#] Split 메서드 (0) | 2015.11.05 |