다음을 통해 공유


확대 변환과 축소 변환

업데이트: 2008년 7월

형식 변환 시 고려해야 하는 중요한 사항은 변환의 결과가 대상 데이터 형식의 범위 안에 있는지의 여부입니다. 확대 변환은 원래 데이터의 모든 가능한 값을 사용할 수 있는 데이터 형식으로 값을 변경합니다. 축소 변환은 일부 가능한 값을 가질 수 없는 데이터 형식으로 값을 변경합니다.

확대 변환

다음 표에서는 표준 확대 변환을 보여 줍니다.

데이터 형식

확대 데이터 형식 1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Long

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Decimal

Decimal, Single, Double2

Single

Single, Double

Double

Double

모든 열거 형식(Enum)

내부 정수 계열 형식과 내부 형식의 모든 확대 형식

Char

Char, String

Char 배열

Char 배열, String

모든 형식

Object

모든 파생된 형식

해당 형식이 파생된 모든 기본 형식 3

모든 형식

구현한 모든 인터페이스

Nothing

모든 데이터 형식이나 개체 형식

1 정의에 따라 모든 데이터 형식의 확대 형식에는 해당 형식이 포함됩니다.

2Integer, UInteger, Long, ULong 또는 Decimal을 Single 또는 Double로 변환하면 정밀도는 낮아지지만 크기는 손실되지 않습니다. 따라서 정보 손실이 발생하지 않습니다.

3 파생된 형식을 기본 형식 중 하나로 변환하는 것은 확대 변환에 포함됩니다. 실제로 파생된 형식은 기본 형식의 모든 멤버를 가지고 있기 때문에 기본 형식의 인스턴스로 사용됩니다. 반대로 기본 형식은 파생된 형식에 의해 정의된 새 멤버를 가지고 있지 않습니다.

확대 변환은 런타임에 항상 성공하며 데이터 손실이 없습니다. 확대 변환은 Option Strict 문에서 형식 검사 스위치를 On으로 설정하든 Off로 설정하든 관계없이 항상 암시적으로 수행할 수 있습니다.

축소 변환

표준 축소 변환에는 다음과 같은 변환이 포함됩니다.

  • 위의 표에 설명된 확대 변환의 역방향 변환(모든 형식이 자체 형식으로 확대되는 것은 제외)

  • Boolean과 임의의 숫자 형식 사이의 변환

  • 임의의 숫자 형식에서 임의의 열거 형식(Enum)으로 변환

  • String과 임의의 숫자 형식, Boolean 또는 Date 사이의 변환

  • 데이터 형식이나 개체 형식을 여기에서 파생된 형식으로 변환

축소 변환은 런타임에 항상 성공하는 것은 아니며 실패하거나 데이터가 손실될 수 있습니다. 대상 데이터 형식이 변환되는 값을 수신할 수 없으면 오류가 발생합니다. 예를 들어, 숫자 변환은 오버플로가 발생할 수 있습니다. 컴파일러에서는 Option Strict 문에서 형식 검사 스위치를 Off로 설정하지 않았으면 축소 변환이 암시적으로 수행되는 것을 허용하지 않습니다.

참고:

For Each¡¦Next 컬렉션의 요소에서 루프 제어 변수로의 변환에 대한 축소 변환 오류는 표시되지 않습니다. 자세한 내용 및 예제는 For Each...Next 문(Visual Basic)의 "축소 변환" 단원을 참조하십시오.

축소 변환 사용 시기

소스 값이 오류 또는 데이터 손실 없이 대상 데이터 형식으로 변환될 수 있다는 사실을 알고 있는 경우에 축소 변환을 사용합니다. 예를 들어, String이 "True"나 "False"를 가진다는 사실을 알고 있으면 CBool 키워드를 사용하여 Boolean으로 변환할 수 있습니다.

변환 중 발생하는 예외

확대 변환은 항상 성공하므로 예외를 throw하지 않습니다. 축소 변환이 실패할 경우에는 대부분 다음과 같은 예외를 throw합니다.

  • InvalidCastException — 두 형식 간에 정의된 변환이 없는 경우

  • OverflowException — 변환된 값이 대상 형식에 비해 너무 큰 경우(정수 계열 형식만 해당)

클래스나 구조체에서 해당 클래스나 구조체에 대한 변환 연산자 역할을 하도록 CType 함수를 정의한 경우, 해당 CType은 적절한 예외를 throw할 수 있습니다. 또한 해당 CType은 다양한 예외를 throw할 수 있는 Visual Basic 함수나 .NET Framework 메서드를 호출할 수 있습니다.

참고 항목

작업

방법: Visual Basic에서 Object를 다른 형식으로 변환

개념

Visual Basic의 데이터 형식

암시적 변환과 명시적 변환

변환 도중 값 변경

문자열과 다른 형식 사이의 변환

배열 변환

Visual Basic의 형식 없는 프로그래밍

참조

데이터 형식 요약(Visual Basic)

형식 변환 함수

기타 리소스

Visual Basic의 형식 변환

변경 기록

날짜

변경 내용

이유

2008년 7월

축소 변환 및 For Each¡¦Next에 대한 참고 사항이 추가되었습니다.

고객 의견