동영상 강의/C# 언어 동영상 강의

[C# 동영상 강의] 5. 형식 변환

언제나휴일 2016. 4. 9. 12:36
반응형

[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 로 옮길 예정입니다.
 

반응형