Dim 문(Visual Basic)

하나 이상의 변수에 사용할 저장 공간을 선언하고 할당합니다.

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] 
Dim [ WithEvents ] variablelist

요소

용어

정의

attributelist

선택 사항입니다. 특성 목록을 참조하십시오.

accessmodifier

선택 사항입니다. 다음 중 하나일 수 있습니다.

자세한 내용은 Visual Basic의 액세스 수준를 참조하십시오.

Shared

선택 사항입니다. Shared를 참조하십시오.

Shadows

선택 사항입니다. Shadows를 참조하십시오.

Static

선택 사항입니다. Static을 참조하십시오.

ReadOnly

선택 사항입니다. ReadOnly를 참조하십시오.

WithEvents

선택 사항입니다. 이벤트를 발생시킬 수 있는 클래스의 인스턴스를 참조하는 개체 변수임을 지정합니다. WithEvents를 참조하십시오.

variablelist

필수 요소. 이 문에서 선언될 변수 목록입니다.

variable [ , variable ... ]

각 variable의 구문과 구성 요소는 다음과 같습니다.

variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

파트

설명

variablename

필수 요소. 변수의 이름입니다. 자세한 내용은 선언된 요소 이름(Visual Basic)를 참조하십시오.

boundslist

선택 사항입니다. 배열 변수의 각 차원의 범위 목록입니다.

New

선택 사항입니다. Dim 문이 실행될 때 클래스의 새 인스턴스를 만듭니다.

datatype

선택 사항입니다. 변수의 데이터 형식입니다.

With

선택 사항입니다. 개체 이니셜라이저 목록을 추가합니다.

propertyname

선택 사항입니다. 만들고 있는 인스턴스의 클래스에 있는 속성의 이름입니다.

propinitializer

propertyname = 뒤에 오는 필수 요소. 속성 이름으로 계산되고 할당되는 식입니다.

initializer

New를 지정하지 않은 경우 선택적 요소입니다. 생성될 때 변수로 계산되고 할당되는 식입니다.

설명

Visual Basic 컴파일러는 Dim 문을 사용하여 변수의 데이터 형식과 기타 정보(예: 변수에 액세스할 수 있는 코드)를 결정합니다. 다음 예제에서는 Integer 값을 저장할 변수를 선언합니다.

Dim numberOfStudents As Integer

열거형, 구조체, 클래스 또는 인터페이스의 이름 또는 모든 데이터 형식을 지정할 수 있습니다.

Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form

참조 형식의 경우 New 키워드를 사용하여 데이터 형식으로 지정된 클래스나 구조체의 새 인스턴스를 만듭니다. New를 사용하는 경우에는 이니셜라이저 식을 사용하지 않습니다. 그 대신 필요한 경우 만드는 변수의 클래스에 대한 생성자에 인수를 제공합니다.

Dim bottomLabel As New System.Windows.Forms.Label

프로시저, 블록, 클래스, 구조체 또는 모듈에서 변수를 선언할 수 있습니다. 소스 파일, 네임스페이스 또는 인터페이스에서는 변수를 선언할 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준(Visual Basic)을 참조하십시오.

프로시저 밖의 모듈 수준에서 선언되는 변수는 멤버 변수 또는 필드입니다. 멤버 변수는 해당 클래스, 구조체 또는 모듈 전반에서 범위 안에 있습니다. 지역 변수는 프로시저 수준에서 선언되는 변수입니다. 지역 변수는 해당 프로시저나 블록 내에서만 범위 안에 있습니다.

프로시저 밖에서는 Public, Protected, Friend, Protected Friend 및 Private 액세스 한정자를 사용하여 변수를 선언할 수 없습니다. 자세한 내용은 Visual Basic의 액세스 수준을 참조하십시오.

Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly, WithEvents 중 한 가지 한정자를 지정하면 Dim 키워드를 사용하는 것은 선택 사항이며 생략하는 것이 일반적입니다.

Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer

경우 Option Explicit 입니다 (기본 설정), 컴파일러를 사용 하 여 모든 변수에 대 한 선언이 필요 합니다. 자세한 내용은 Option Explicit 문(Visual Basic)을 참조하십시오.

초기 값 지정

변수가 생성되면 해당 변수에 값을 할당할 수 있습니다. 값 형식의 경우 이니셜라이저를 사용하여 변수에 할당할 식을 제공할 수 있습니다. 이 식은 컴파일 타임에 계산될 수 있는 상수로 계산되어야 합니다.

Dim quantity As Integer = 10
Dim message As String = "Just started"

이니셜라이저를 지정하고 As 절에 데이터 형식을 지정하지 않으면 이니셜라이저에서 데이터 형식을 유추하기 위해 형식 유추가 사용됩니다. 다음 코드 예제에서 num1과 num2는 모두 정수로 강력하게 형식화되어 있습니다. 두 번째 선언에서 형식 유추는 값 3에서 형식을 유추합니다.

' Use explicit typing.
Dim num1 As Integer = 3

' Use local type inference.
Dim num2 = 3

형식 유추는 프로시저 수준에서 적용됩니다. 클래스, 구조체, 모듈 또는 인터페이스의 프로시저 밖에는 적용되지 않습니다. 형식 유추에 대한 자세한 내용은 Option Infer 문지역 형식 유추(Visual Basic)를 참조하십시오.

데이터 형식 또는 이니셜라이저를 지정하지 않은 경우에 대한 자세한 내용은 이 항목의 뒷 부분에 나오는 기본 데이터 유형 및 값을 참조하십시오.

개체 이니셜라이저를 사용하여 명명된 형식과 익명 형식의 인스턴스를 선언할 수 있습니다. 다음 코드는 Student 클래스의 인스턴스를 만들고 개체 이니셜라이저를 사용하여 속성을 초기화합니다.

Dim student1 As New Student With {.First = "Michael", 
                                  .Last = "Tucker"}

개체 이니셜라이저에 대한 자세한 내용은 방법: 개체 이니셜라이저를 사용하여 개체 선언(Visual Basic), 개체 이니셜라이저: 명명된 형식과 익명 형식(Visual Basic)익명 형식(Visual Basic)을 참조하십시오.

복수 변수 선언

각 변수에 변수 이름을 지정하고 각 배열 이름 다음에 괄호를 지정하여 하나의 선언문에서 여러 변수를 선언할 수 있습니다. 변수가 여러 개 있으면 쉼표로 구분됩니다.

Dim lastTime, nextTime, allTimes() As Date

하나의 As 절을 사용하여 두 개 이상의 변수를 선언하면 해당 변수 그룹에 이니셜라이저를 제공할 수 없습니다.

선언하는 변수마다 별도의 As 절을 사용하여 여러 변수에 서로 다른 데이터 형식을 지정할 수 있습니다. 각 변수는 해당 variablename 구성 요소 다음에 오는 첫 번째 As 절에 지정된 데이터 형식을 사용합니다.

Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double

배열

여러 값이 포함될 수 있는 배열을 저장하기 위한 변수를 선언할 수 있습니다. 배열이 포함하는 변수를 지정하려면 variablename 바로 다음에 괄호를 사용합니다. 배열에 대한 자세한 내용은 Visual Basic의 배열을 참조하십시오.

배열의 각 차원의 하한과 상한을 지정할 수 있습니다. 상한과 하한을 지정하려면 boundslist를 괄호 안에 넣습니다. 각 차원에 대해 boundslist는 상한과 필요에 따라 하한도 지정합니다. 하한은 지정 여부에 관계없이 항상 0입니다. 인덱스의 범위는 각각 0부터 해당 상한값까지 될 수 있습니다.

다음 두 문은 동일한 의미를 갖습니다. 각 문은 21개의 Integer 요소로 구성된 배열을 선언합니다. 배열에 액세스할 때 인덱스는 0부터 20까지의 값을 가질 수 있습니다.

Dim totals(20) As Integer
Dim totals(0 To 20) As Integer

다음 문은 Double 형식의 2차원 배열을 선언합니다. 배열에는 6열(5 + 1)씩 4행(3 + 1)이 있습니다. 상한은 차원의 길이가 아니라 인덱스에 사용할 수 있는 가장 큰 값을 나타냅니다. 차원의 길이는 상한에 1을 더한 것입니다.

Dim matrix2(3, 5) As Double

배열은 1차원부터 32차원까지 가능합니다.

배열을 선언할 때 모든 범위를 비워둘 수 있습니다. 이렇게 하면 배열은 지정한 차원 수를 갖지만 초기화되지 않습니다. 배열 요소의 일부를 초기화하기 전까지 배열은 Nothing 값을 갖습니다. Dim 문은 모든 차원의 범위를 지정하거나 어떤 차원의 범위도 지정하지 않아야 합니다.

' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)

배열이 2차원 이상이면 괄호 안에 쉼표를 포함하여 차원 수를 나타내야 합니다.

Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte

배열의 차원을 -1로 선언하여 길이가 0인 배열을 선언할 수 있습니다. 길이가 0인 배열을 보유하는 변수에는 Nothing 값이 포함되지 않습니다. 특정 공용 언어 런타임 기능에는 길이가 0인 배열이 필요합니다. 배열 등에 액세스하려고 하면 런타임 예외가 발생합니다. 자세한 내용은 Visual Basic의 배열을 참조하십시오.

배열 리터럴을 사용하여 어레이 값을 초기화할 수 있습니다. 이렇게 하려면 초기화 값을 중괄호({})로 묶습니다.

Dim longArray() As Long = {0, 1, 2, 3}

다차원 배열의 경우 각 개별 차원에 대한 초기화는 외부 차원에서 중괄호로 묶습니다. 요소는 행 중심의 순서로 지정됩니다.

Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}

어레이 리터럴에 대한 자세한 내용은 Visual Basic의 배열을 참조하십시오.

기본 데이터 유형 및 값

다음 표는 Dim 문에 데이터 형식과 이니셜라이저를 다양한 방법으로 지정한 결과를 설명합니다.

데이터 형식이 지정되었습니까?

이니셜라이저가 지정되었습니까?

예제

결과

아니요

아니요

Dim qty

경우 Option Strict 는 변수가 설정 해제 (기본값) Nothing.

Option Strict가 On이면 컴파일 타임 오류가 발생합니다.

아니요

Dim qty = 5

경우 Option Infer (기본 설정), 변수는 데이터의 이니셜라이저를 입력 됩니다. 자세한 내용은 지역 형식 유추(Visual Basic)를 참조하십시오.

Option Infer가 off이고 Option Strict가 off이면 변수의 데이터 형식은 Object가 됩니다.

Option Infer가 Off이고 Option Strict가 On이면 컴파일 타임 오류가 발생합니다.

아니요

Dim qty As Integer

변수가 데이터 형식에 대해 기본 값으로 초기화되었습니다. 이 단원의 뒷부분에 있는 테이블을 참조하십시오.

Dim qty As Integer = 5

이니셜라이저의 데이터 형식이 지정된 데이터 형식으로 변환되지 않으면 컴파일 타임 오류가 발생합니다.

데이터 형식을 지정하고 이니셜라이저를 지정하지 않으면 Visual Basic에서 변수를 해당 데이터 형식의 기본값으로 초기화합니다. 다음 표에서는 기본 초기화 값을 보여 줍니다.

데이터 형식

기본값

모든 숫자 형식(Byte 및 SByte 포함)

0

Char

이진수 0

모든 참조 형식(Object, String 및 모든 배열 포함)

Nothing

Boolean

False

Date

1년 1월 1일 오전 12:00(01/01/0001 12:00:00 AM)

구조체의 각 요소는 별도의 변수인 것처럼 초기화됩니다. 배열의 길이를 선언하고 해당 요소를 초기화하지 않는 경우 각 요소는 마치 별도의 변수인 것처럼 초기화됩니다.

Static 지역 변수 수명

Static 지역 변수의 수명은 해당 변수가 선언된 프로시저의 수명보다 깁니다. 변수의 수명은 프로시저가 선언된 위치와 해당 프로시저가 Shared인지 여부에 따라 달라집니다.

프로시저 선언

변수 초기화

더 이상 변수가 없음

모듈 내부

프로시저가 처음 호출될 때

프로그램 실행을 중지할 때

클래스 또는 구조체에서 절차가입니다.Shared

프로시저가 특정 인스턴스 또는 클래스나 구조체 자체에서 처음 호출될 때

프로그램 실행을 중지할 때

클래스 또는 구조체에 절차 되지 않습니다.Shared

프로시저가 특정 인스턴스에서 처음 호출될 때

인스턴스가 GC(가비지 수집)를 위해 해제될 때

특성 및 한정자

지역 변수가 아닌 멤버 변수에만 특성을 적용할 수 있습니다. 특성은 정보를 어셈블리 메타데이터에 제공하므로 지역 변수와 같은 임시 저장소에는 의미가 없습니다.

모듈 수준에서는 Static 한정자를 사용하여 멤버 변수를 선언할 수 없습니다. 프로시저 수준에서는 Shared, Shadows, ReadOnly, WithEvents 또는 액세스 한정자를 사용하여 지역 변수를 선언할 수 없습니다.

accessmodifier를 제공하여 변수에 액세스할 수 있는 코드를 지정할 수 있습니다. 프로시저 외부의 클래스 및 모듈 멤버 변수는 기본적으로 전용 액세스이고 구조체 멤버 변수는 기본적으로 공용 액세스입니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 프로시저 내의 지역 변수에는 액세스 한정자를 사용할 수 없습니다.

WithEvents는 멤버 변수에만 지정할 수 있고 프로시저 내 지역 변수에는 지정할 수 없습니다. WithEvents를 지정하는 경우 변수의 데이터 형식은 Object가 아니라 특정 클래스 형식이어야 합니다. WithEvents로는 배열을 선언할 수 없습니다. 이벤트에 대한 자세한 내용은 이벤트(Visual Basic)을 참조하십시오.

참고

클래스, 구조체 또는 모듈 외부의 코드에서는 멤버 변수의 이름을 해당 클래스, 구조체 또는 모듈의 이름으로 한정해야 합니다.프로시저 또는 블록 외부의 코드에서는 해당 프로시저 또는 블록 내부의 지역 변수를 참조할 수 없습니다.

관리 되는 리소스를 해제합니다.

.NET Framework 가비지 수집기가 관리 되는 리소스를 별도 코딩이 없이 삭제 합니다. 그러나 관리 되는 리소스는 가비지 수집기를 기다리지 않고 폐기를 할 수 있습니다.

클래스 (예: 데이터베이스 연결 또는 파일 핸들) 특히 귀중 하 고 부족 한 자원을 점유 하는 경우 더 이상 사용 되는 클래스 인스턴스를 정리 하는 다음 가비지 수집 될 때까지 기다려야 하지 않을 수 없습니다. 클래스를 구현할 수 있는 IDisposable 가비지 수집 하기 전에 리소스를 해제 하는 방법을 제공 하는 인터페이스입니다. 해당 인터페이스를 구현 하는 클래스를 노출 한 Dispose 귀중 한 리소스를 즉시 해제 하려면 호출할 수 있는 메서드.

Using 문 자원 획득, 문 집합을 실행 및 다음 리소스를 삭제 하는 프로세스를 자동화 합니다. 그러나 리소스 구현 해야의 IDisposable 인터페이스입니다. 자세한 내용은 Using 문(Visual Basic)을 참조하십시오.

예제

다음 예제에서는 다양한 옵션과 함께 Dim 문을 사용하여 변수를 선언합니다.

' Declare and initialize a Long variable. 
Dim startingAmount As Long = 500

' Declare a variable that refers to a Button object, 
' create a Button object, and assign the Button object 
' to the variable. 
Dim switchButton As New System.Windows.Forms.Button

' Declare a local variable that always retains its value, 
' even after its procedure returns to the calling code. 
Static totalSales As Double 

' Declare a variable that refers to an array. 
Dim highTemperature(31) As Integer 

' Declare and initialize an array variable that 
' holds four Boolean check values. 
Dim checkValues() As Boolean = {False, False, True, False}

다음 예제에서는 1부터 30 사이의 소수를 나열합니다. 지역 변수의 범위가 코드 주석에 설명되어 있습니다.

Public Sub ListPrimes()
    ' The sb variable can be accessed only 
    ' within the ListPrimes procedure. 
    Dim sb As New System.Text.StringBuilder()

    ' The number variable can be accessed only 
    ' within the For...Next block.  A different 
    ' variable with the same name could be declared 
    ' outside of the For...Next block. 
    For number As Integer = 1 To 30
        If CheckIfPrime(number) = True Then
            sb.Append(number.ToString & " ")
        End If 
    Next

    Debug.WriteLine(sb.ToString)
    ' Output: 2 3 5 7 11 13 17 19 23 29 
End Sub 


Private Function CheckIfPrime(ByVal number As Integer) As Boolean 
    If number < 2 Then 
        Return False 
    Else 
        ' The root and highCheck variables can be accessed 
        ' only within the Else block.  Different variables 
        ' with the same names could be declared outside of 
        ' the Else block. 
        Dim root As Double = Math.Sqrt(number)
        Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))

        ' The div variable can be accessed only within 
        ' the For...Next block. 
        For div As Integer = 2 To highCheck
            If number Mod div = 0 Then 
                Return False 
            End If 
        Next 

        Return True 
    End If 
End Function

다음 예제에서는 speedValue 변수를 클래스 수준에서 선언합니다. Private 키워드를 사용하여 변수를 선언합니다. 변수는 Car 클래스의 임의 프로시저로 액세스할 수 있습니다.

' Create a new instance of a Car. 
Dim theCar As New Car()
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)

Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
    ' The speedValue variable can be accessed by 
    ' any procedure in the Car class. 
    Private speedValue As Integer = 0

    Public ReadOnly Property Speed() As Integer 
        Get 
            Return speedValue
        End Get 
    End Property 

    Public Sub Accelerate(ByVal speedIncrease As Integer)
        speedValue += speedIncrease
    End Sub 
End Class

참고 항목

작업

방법: 개체 이니셜라이저를 사용하여 개체 선언(Visual Basic)

참조

Const 문(Visual Basic)

ReDim 문(Visual Basic)

Option Explicit 문(Visual Basic)

Option Infer 문

Option Strict 문

프로젝트 디자이너, 컴파일 페이지(Visual Basic)

개념

Visual Basic의 변수 선언

개체 이니셜라이저: 명명된 형식과 익명 형식(Visual Basic)

익명 형식(Visual Basic)

개체 이니셜라이저: 명명된 형식과 익명 형식(Visual Basic)

지역 형식 유추(Visual Basic)

기타 리소스

Visual Basic의 배열