[C# 동영상 강의] 5. 형식 변환
다루는 내용
형식변환(암시적변환, 명시적변환, 변환연산자, 형식변환 Helper클래스
as, is 연산자
Boxing, Unboxing
대본
슬라이드 1
http://msdn.microsoft.com/ko-kr/library/ms173105.aspx
본 강의에서는 형식 변환에 대해서 살펴보기로 하겠습니다.
슬라이드 2
변수의 형식은 한 번 선언하면 컴파일 시에 지정되어 바뀌지 않습니다. 하지만 프로그래밍에 있어 문자열을 정수로 바꾸거나 날짜 데이터를 문자열로 바꾸어서 사용을 해야 경우 등이 발생할 수 있습니다.
C#에서는 이와 같은 경우를 위해 형식 변환에 대한 문법을 제공하고 있습니다.
암시적 변환은 컴파일러가 알아서 형식 변환을 하는 경우로써 코드 상에서 특수한 구문을 사용할 필요가 없습니다. short 형 값을 int 형 변수에 대입하는 것과 같이 작은 정수에서 큰 정수 형식으로의 변환이나 파생 클래스 개체를 기본 클래스 형식의 변수에 대입하는 것이 대표적인 경우입니다.
명시적 변환은 캐스트 연산자를 사용하여 형식 변환하는 것을 말하는데 형식 변환 중에 데이터의 손실이 있을 수 있습니다.
그리고, 사용자가 정의한 형식에서 변환 연산자를 오버로드를 함으로써 명시적 변환이나 암시적 변환이 가능하게 정의할 수도 있습니다.
마지막으로 형식 변환을 목적으로 만든 Helper클래스를 통해서도 변환을 할 수가 있습니다. 대표적인 Helper클래스로는 System.Convert가 있습니다.
슬라이드 3
Boxing과 Unboxing은 값 형식과 참조 형식간에 형식 변환하는 과정에 대한 공정입니다.
Boxing은 값 형식을 참조 형식으로 변환하는 공정으로 해당 공정은 CLR이 값 형식을 래핑하여 관리되는 힙에 저장을 하게 됩니다. 이 공정에서는 참조 형식 개체를 생성하는 작업과 값을 복사하는 등의 오버헤드가 발생하게 됩니다.
반대로 Unboxing은 Boxing된 참조 형식에서 값 형식으로 변환하는 공정을 얘기합니다.
해당 공정에서는 개체 인스턴스가 지정한 값 형식을 boxing했는지를 확인하는 과정과 개체 인스턴스의 값을 값 형식의 변수에 복사하는 과정으로 이루어 집니다. Boxing에 비해서는 적지만 마찬가지로 수행 과정에서 오버헤드가 발생합니다.
이러한 오버헤드를 줄이기 위해 C#은 제네릭 형식을 제공하고 있습니다.
보통 boxing과 unboxing은 지역에 선언한 변수를 멤버 컨테이너나 다른 개체에 전달하는 과정에서 발생할 수 있는데 이러한 경우에 값 형식을 멤버를 두는 래퍼 클래스를 정의함으로써 Boxing과 Unboxing과정을 없애 오버헤드를 줄일 수도 있습니다.
슬라이드 4
형식 변환에 관련된 연산자로 as와 is 연산자가 있습니다.
As 연산자는 호환되는 참조 형식 간에 형식 변환을 수행하는 데 사용을 하게 됩니다. 캐스트 연산자를 사용하는 명시적 연산과의 차이로는 변환이 불가능 한 경우 예외를 발생시키지 않고 null을 반환한다는 것과 참조 형식 간에서만 사용할 수 있다는 것입니다.
is 연산은 형식 변환이 가능한지를 검사하여 변환 가능 여부에 대한 bool값을 반환을 합니다. 캐스트 연산자를 통해 명시적 연산을 하기 전에 is연산을 사용하여 변환 가능 여부를 체크한 후 사용을 하는 것을 권고합니다.
실습
앞으로 프로그래밍 관련 글은 새롭게 개설한 언제나 휴일 전용 사이트에서 만나보세요.
2017년 1월 1일까지 이 곳의 프로그래밍 자료는 http://ehpub.co.kr 로 옮길 예정입니다.
'동영상 강의 > C# 언어 동영상 강의' 카테고리의 다른 글
[C# 동영상 강의] 11. Object (0) | 2016.04.09 |
---|---|
[C# 동영상 강의] 10. 메서드 (0) | 2016.04.09 |
[C# 동영상 강의] 9. 생성자 (0) | 2016.04.09 |
[C# 동영상 강의] 8. const와 readonly (0) | 2016.04.09 |
[C# 동영상 강의] 7. static (정적 클래스, 정적 멤버, 정적 생성자) (0) | 2016.04.09 |
[C# 동영상 강의] 6. 속성 (0) | 2016.04.09 |
[C# 동영상 강의] 4. 클래스(Class) (0) | 2016.04.09 |
[C# 동영상 강의] 3. 구문(조건, 선택, 반복문 포함) (0) | 2016.04.09 |
[C# 동영상 강의] 2. 형식 (0) | 2016.04.09 |
[C# 동영상 강의] 1. C#과 .NET Framework 소개 (0) | 2016.04.09 |