다음을 통해 공유


Dim 문(Visual Basic)

업데이트: 2007년 11월

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

[ <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

    필수 요소입니다. 변수의 이름입니다. 선언 요소 이름을 참조하십시오.

    boundslist

    선택적 요소. 배열 변수의 각 차원의 범위 목록입니다.

    New

    선택적 요소. Dim 문이 실행될 때 클래스의 새 인스턴스를 만듭니다.

    datatype

    Option Strict가 On인 경우 필수적 요소입니다. 변수의 데이터 형식입니다.

    With

    선택적 요소. 개체 이니셜라이저 목록을 추가합니다.

    propertyname

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

    propinitializer

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

    initializer

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

설명

프로그램에서 사용하는 변수는 모두 선언해야 합니다. 선언을 통해 Visual Basic 컴파일러에 변수의 데이터 형식과 변수에 액세스할 수 있는 코드 등 기타 정보를 알려 줄 수 있습니다. 다음 예제에서는 Integer 값을 저장할 변수를 선언합니다.

Dim numberOfStudents As Integer

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

Option Explicit가 On(기본값)인 경우 컴파일러에는 사용되는 모든 변수에 대한 선언이 필요합니다. Option Explicit Off로 설정하면 선언되지 않은 모든 변수는 기본적으로 사용자의 의도와 다르게 Object 데이터 형식이 됩니다.

Dim 문에서 각 변수의 데이터 형식을 지정할 수 있습니다. 초기 값을 지정할 수도 있습니다. 지정하지 않으면 Visual Basic에서 기본 설정이 사용됩니다. 자세한 내용은 이 도움말 페이지의 "자세한 정보"에 있는 "데이터 형식 규칙"과 "기본값"을 참조하십시오. 다음 예제에서는 String 변수를 선언하고 초기화합니다.

Dim summary As String = "Summary of results" 

Dim 문에 accessmodifier를 제공하여 변수에 액세스할 수 있는 코드를 지정할 수 있습니다. 자세한 내용은 이 도움말 페이지의 "자세한 정보"에 있는 "한정자"와 "액세스 수준"을 참조하십시오.

여러 값이 포함될 수 있는 배열을 저장하기 위한 변수를 선언할 수 있습니다. 자세한 내용은 이 도움말 페이지의 "자세한 정보"에 있는 "배열 규칙"을 참조하십시오. 배열에 대한 자세한 내용은 Visual Basic의 배열을 참조하십시오. 다음 예제에서는 Integer 배열 변수를 선언합니다.

Dim days() As Integer 

일반적으로 모든 Dim 문은 변수를 사용하는 코드 영역의 시작 부분에 두어야 합니다. 자세한 내용은 이 도움말 페이지의 "자세한 정보"에 있는 "문제 해결"을 참조하십시오.

Visual Basic 2008에서는 명명된 형식과 익명 형식의 인스턴스를 선언하는 데 사용되는 개체 이니셜라이저와 지역 형식 유추가 도입되었습니다. 자세한 내용은 익명 형식개체 이니셜라이저: 명명된 형식과 익명 형식지역 형식 유추를 참조하십시오.

자세한 정보

이 단원에서는 다음 영역을 자세히 설명합니다.

  • 선언

  • 데이터 형식

  • Arrays

  • 동작

  • 문제 해결

선언 규칙

  • 선언 컨텍스트. 모든 프로시저 외부의 모듈 수준에서 선언되는 변수는 멤버 변수 또는 필드입니다. 이 변수는 해당 변수를 선언하는 클래스, 구조체 또는 모듈의 멤버입니다.

    프로시저 수준에서 선언되는 변수는 지역 변수입니다. 이 변수는 해당 변수를 선언하는 프로시저 또는 블록에 대해 지역적으로 설정됩니다.

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

  • **Dim의 암시적 사용.**한정자 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
    

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

  • **WithEvents 변수.**WithEvents는 멤버 변수에만 지정할 수 있고 프로시저 내 지역 변수에는 지정할 수 없습니다.

    WithEvents를 지정하는 경우 변수의 데이터 형식은 Object가 아니라 특정 클래스 형식이어야 합니다. WithEvents로는 배열을 선언할 수 없습니다.

    이벤트에 대한 자세한 내용은 이벤트 및 이벤트 처리기를 참조하십시오.

  • 여러 변수. 변수마다 variablename 구성 요소를 지정하고 각 배열 이름 다음에 괄호를 지정하여 같은 선언문에서 여러 변수를 선언할 수 있습니다. 변수가 여러 개 있으면 쉼표로 구분됩니다.

    Dim lastTime, nextTime, allTimes() As Date
    

데이터 형식 규칙

  • **데이터 형식.**Dim 문은 변수의 데이터 형식을 선언할 수 있습니다. 열거형, 구조체, 클래스 또는 인터페이스의 이름이나 데이터 형식을 지정할 수 있습니다.

    Dim finished As Boolean
    Dim monitorBox As System.Windows.Forms.Form
    
  • **기본 형식.**datatype을 지정하지 않는 경우 변수는 initializer의 데이터 형식을 사용합니다. datatype과 initializer가 모두 없으면 기본적으로 데이터 형식은 Object 데이터 형식입니다. datatype과 initializer를 모두 지정하는 경우 initializer의 데이터 형식이 datatype으로 변환될 수 있어야 합니다.

  • 다른 형식. 선언하는 변수마다 별도의 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
    
  • **초기화.**Dim 문은 variablelist에서 선택한 변수의 내용을 초기화할 수 있습니다. 값 형식의 경우 initializer를 사용하여 변수에 할당할 식을 제공할 수 있습니다. 이 식은 컴파일 타임에 계산될 수 있는 상수로 계산되어야 합니다.

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

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

    Dim bottomLabel As New System.Windows.Forms.Label
    

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

배열 규칙

  • **배열 변수.**variablelist의 변수가 배열임을 지정하려면 해당 variablename 바로 다음에 괄호를 사용합니다. 배열이 2차원 이상이면 괄호 안에 쉼표를 포함하여 차원 수를 나타내야 합니다.

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

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

    자세한 내용은 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)이 있습니다.

    Dim matrix2(3, 5) As Double
    

    상한은 해당 차원의 길이, 즉 상한에 1을 더한 값이 아니라 해당 인덱스에 사용할 수 있는 가장 큰 값을 나타냅니다.

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

    Dim messages() As String
    
  • 빈 배열. 배열 차원의 상한을 선언하는 데는 -1을 사용할 수 있습니다. 이는 배열이 비어 있지만 Nothing은 아니라는 뜻으로, 특정 공용 언어 런타임 함수에 이러한 구분이 필요합니다. 그러나 Visual Basic 코드에서는 이러한 배열에 액세스할 수 없습니다. 액세스를 시도하면 실행 중 IndexOutOfRangeException 오류가 발생합니다. 자세한 내용은 방법: 요소가 없는 배열 만들기를 참조하십시오.

  • 배열 초기화. 초기화 값을 중괄호({})로 묶어 배열 값을 초기화할 수 있습니다.

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

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

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

동작

  • 기본값. 변수의 initializer를 지정하지 않으면 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 지역 변수의 수명은 해당 변수가 선언된 프로시저의 수명보다 깁니다. 변수의 수명은 프로시저가 선언된 위치와 해당 프로시저가 Shared인지 여부에 따라 달라집니다.

    프로시저 선언

    변수 초기화

    변수 종료

    모듈 내부

    프로시저가 처음 호출될 때

    프로그램 실행을 중지할 때

    클래스나 구조체에서는 Shared

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

    프로그램 실행을 중지할 때

    클래스나 구조체에서는 Shared 아님

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

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

문제 해결

  • **실행 순서.**Dim 문 자체는 실행문이 아닙니다. 그러나 하나 이상의 변수를 초기화할 경우 그러한 초기화는 할당문으로 처리됩니다. 즉, 변수의 값은 다음과 같은 단계를 거칩니다.

    1. 변수를 선언하는 코드 요소에 처음 들어갈 때 Visual Basic에서 해당 데이터 형식의 기본값으로 변수를 초기화합니다.

    2. 변수의 Dim 문을 실행하게 되면 Visual Basic에서 Dim 문에 제공된 값으로 변수를 초기화합니다.

    3. 변수의 Dim 문으로 실행이 돌아올 때마다 Visual Basic에서 변수를 Dim 문에 제공된 값으로 다시 설정합니다.

    이것은 Dim 문을 사용하여 변수를 초기화하는 경우 다음과 같은 의미를 갖습니다.

    • Dim 문을 실행하기 전에 변수를 사용하는 경우 변수에는 Dim 문에 제공된 값이 아니라 해당 데이터 형식의 기본값이 지정됩니다.

    • Dim 문이 실행되지 않으면 변수는 Dim 문에 제공된 값으로 초기화되지 않습니다.

    • 값을 변경한 다음 Dim 문으로 돌아오면 변경한 값이 Dim 문에 제공된 값으로 대체됩니다.

    모든 Dim 문을 모듈 또는 프로시저와 같이 해당 코드 영역의 시작 부분에 두면 의도한 대로 코드에서 Dim 문을 초기화합니다.

예제

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

' The following statement declares and initializes a Long variable.
Dim startingAmount As Long = 500
' The following statement declares a variable that refers to a Button 
' object, creates a new Button object, and assigns it to the variable.
Dim switchButton As New System.Windows.Forms.Button
' The following statement declares a variable that can only be 
' accessed by code in the same class, structure, or module.
Private homeTelephone As String = ""
' The following statement declares a local variable that always retains
' its value, even after its procedure returns to the calling code.
Static totalSales As Double
' The following statement declares a variable that refers to an array.
Dim highTemperature(31) As Integer
' The following statement declares and initializes an array variable 
' that holds 4 Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}

참고 항목

작업

방법: 배열 변수 선언

방법: 배열 변수 선언

방법: 익명 형식의 인스턴스 선언

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

개념

Visual Basic의 변수 선언

개체 이니셜라이저: 명명된 형식과 익명 형식

익명 형식

개체 이니셜라이저: 명명된 형식과 익명 형식

지역 형식 유추

참조

Const 문(Visual Basic)

ReDim 문(Visual Basic)

Option Explicit 문(Visual Basic)