Visual Basic의 문
Visual Basic의 문은 완전한 명령이며 키워드, 연산자, 변수, 상수, 식을 포함할 수 있습니다. 각 문은 다음 범주 중 하나에 속합니다.
변수, 상수 또는 프로시저의 이름을 지정하고 데이터 형식을 지정할 수 있는 선언문.
작업을 시작하는 실행 가능 문. 이러한 문은 메서드 또는 함수를 호출할 수 있으며 코드 블록을 반복하거나 분기할 수 있습니다. 실행 가능 문에는 변수나 상수에 값이나 식을 할당하는 대입문이 포함됩니다.
이 항목에서는 각 범주에 대해 설명합니다. 또한 이 항목에서는 한 줄에 여러 문을 결합하는 방법과 여러 줄에서 문을 계속 진행하는 방법에 대해 설명합니다.
선언문
선언문을 사용하여 프로시저, 변수, 속성, 배열, 상수의 이름을 지정하고 정의합니다. 프로그래밍 요소를 선언할 때 해당 데이터 형식, 액세스 수준, 범위를 정의할 수도 있습니다. 자세한 내용은 선언된 요소 특성을 참조하세요.
다음 예제에는 세 개의 선언이 포함되어 있습니다.
Public Sub ApplyFormat()
Const limit As Integer = 33
Dim thisWidget As New widget
' Insert code to implement the procedure.
End Sub
첫 번째 선언은 Sub
문입니다. 일치하는 End Sub
문과 함께 applyFormat
이라는 프로시저를 선언합니다. 또한 applyFormat
이 Public
임을 지정합니다. 이는 참조할 수 있는 모든 코드에서 호출할 수 있음을 의미합니다.
두 번째 선언은 Const
문이며 Integer
데이터 형식과 값 33을 지정하는 상수 limit
을 선언합니다.
세 번째 선언은 Dim
문이며 변수 thisWidget
을 선언합니다. 데이터 형식은 특정 개체, 즉 Widget
클래스에서 만든 개체입니다. 변수를 기본 데이터 형식 또는 사용 중인 애플리케이션에 노출되는 모든 개체 형식으로 선언할 수 있습니다.
초기 값
선언문이 포함된 코드가 실행되면 Visual Basic에서는 선언된 요소에 필요한 메모리를 예약합니다. 요소에 값이 있는 경우 Visual Basic은 해당 데이터 형식의 기본값으로 초기화합니다. 자세한 내용은 Dim 문의 “동작”을 참조하세요.
다음 예제와 같이 선언의 일부로 변수에 초기 값을 할당할 수 있습니다.
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
변수가 개체 변수인 경우 다음 예제와 같이 새 연산자 키워드를 사용하여 선언할 때 해당 클래스의 인스턴스를 명시적으로 만들 수 있습니다.
Dim f As New FileInfo("filename")
선언문에 지정한 초기 값은 실행이 선언문에 도달할 때까지 변수에 할당되지 않는다는 점에 유의하세요. 그때까지는 변수에 해당 데이터 형식에 대한 기본값이 포함됩니다.
실행 가능 문
실행 가능 문은 작업을 수행합니다. 프로시저를 호출하거나, 코드의 다른 위치로 분기하거나, 여러 문을 반복하거나, 식을 평가할 수 있습니다. 대입문은 실행 가능 문의 특수한 경우입니다.
다음 예제에서는 If...Then...Else
컨트롤 구조체를 사용하여 변수 값에 따라 다른 코드 블록을 실행합니다. 각 코드 블록 내에서 For...Next
루프는 지정된 횟수만큼 실행됩니다.
Public Sub StartWidget(ByVal aWidget As widget,
ByVal clockwise As Boolean, ByVal revolutions As Integer)
Dim counter As Integer
If clockwise = True Then
For counter = 1 To revolutions
aWidget.SpinClockwise()
Next counter
Else
For counter = 1 To revolutions
aWidget.SpinCounterClockwise()
Next counter
End If
End Sub
이전 예제에서 If
문은 매개 변수 clockwise
의 값을 확인합니다. 값이 True
이면 aWidget
의 spinClockwise
메서드를 호출합니다. 값이 False
이면 aWidget
의 spinCounterClockwise
메서드를 호출합니다. If...Then...Else
컨트롤 구조체는 End If
로 끝납니다.
각 블록 내의 For...Next
루프는 revolutions
매개 변수의 값과 동일한 횟수만큼 적절한 메서드를 호출합니다.
대입문
대입문은 대입 연산자(=
)의 오른쪽에 있는 값을 가져와 왼쪽의 요소에 저장하는 할당 연산을 수행하며, 다음 예제에서와 같이 대입 연산자의 오른쪽에 있는 값을 왼쪽의 요소에 저장합니다.
v = 42
이전 예제에서 대입문은 리터럴 값 42를 변수 v
에 저장합니다.
적용 가능한 프로그래밍 요소
대입 연산자의 왼쪽에 있는 프로그래밍 요소는 값을 수락하고 저장할 수 있어야 합니다. 즉, ReadOnly가 아닌 변수 또는 속성이거나 배열 요소여야 합니다. 대입문의 컨텍스트에서 이러한 요소를 “왼쪽 값”을 의미하는 lvalue라고 부르기도 합니다.
대입 연산자의 오른쪽에 있는 값은 리터럴, 상수, 변수, 속성, 배열 요소, 기타 식 또는 함수 호출의 모든 조합으로 구성될 수 있는 식에 의해 생성됩니다. 다음 예제에서는 이것을 보여 줍니다.
x = y + z + FindResult(3)
이전 예에서는 변수 y
에 있는 값을 변수 z
에 있는 값에 더한 다음 함수 findResult
에 대한 호출로 반환된 값을 더합니다. 그러면 이 식의 총 값이 변수 x
에 저장됩니다.
대입문의 데이터 형식
대입 연산자는 숫자 값 외에도 다음 예제와 같이 String
값을 할당할 수 있습니다.
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
다음 예제에서와 같이 Boolean
리터럴 또는 Boolean
식을 사용하여 Boolean
값을 할당할 수도 있습니다.
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.
마찬가지로 Char
, Date
또는 Object
데이터 형식의 프로그래밍 요소에 적절한 값을 할당할 수 있습니다. 또한 해당 인스턴스가 만들어진 클래스로 선언된 요소에 개체 인스턴스를 할당할 수도 있습니다.
복합 대입문
복합 대입문은 프로그래밍 요소에 할당하기 전에 먼저 식에 대한 연산을 수행합니다. 다음 예제는 이러한 연산자 중 하나인 +=
연산자의 왼쪽에 있는 변수 값을 오른쪽에 있는 식의 값만큼 증가시키는 연산자를 보여 줍니다.
n += 1
이전 예제에서는 n
의 값에 1을 더한 다음 n
에 새 값을 저장합니다. 이는 다음 문과 동일한 축약형입니다.
n = n + 1
이 형식의 연산자를 사용하여 다양한 복합 대입 작업을 수행할 수 있습니다. 이러한 연산자 목록과 이에 대한 자세한 내용은 대입 연산자를 참조하세요.
연결 대입 연산자(&=
)는 다음 예제와 같이 기존 문자열 끝에 문자열을 추가하는 데 유용합니다.
Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".
대입문의 형식 변환
변수, 속성 또는 배열 요소에 할당하는 값은 해당 대상 요소에 적합한 데이터 형식이어야 합니다. 일반적으로 대상 요소의 데이터 형식과 동일한 데이터 형식의 값을 생성하도록 해야 합니다. 그러나 일부 형식은 대입 중에 다른 형식으로 변환될 수 있습니다.
데이터 형식 간 변환에 대한 자세한 내용은 Visual Basic의 형식 변환을 참조하세요. 간단히 말해 Visual Basic은 지정된 형식의 값을 확장되는 다른 형식으로 자동으로 변환합니다. 확대 변환은 항상 런타임에 성공하고 데이터가 손실되지 않는 변환입니다. 예를 들어 Integer
가 Double
로 확장되므로 Visual Basic은 적절한 경우 Integer
값을 Double
로 변환합니다. 자세한 내용은 Widening and Narrowing Conversions을 참조하세요.
축소 변환(확대되지 않는 변환)은 런타임에 실패하거나 데이터가 손실될 위험이 있습니다. 형식 변환 함수를 사용하여 명시적으로 축소 변환을 수행하거나 Option Strict Off
를 설정하여 컴파일러가 모든 변환을 암시적으로 수행하도록 지시할 수 있습니다. 자세한 내용은 암시적 및 명시적 변환을 참조하세요.
한 줄에 여러 문 배치
콜론(:
) 문자로 구분된 여러 문을 한 줄에서 사용할 수 있습니다. 다음 예제에서는 이것을 보여 줍니다.
Dim sampleString As String = "Hello World" : MsgBox(sampleString)
경우에 따라 편리하기도 하지만 이러한 양식의 구문은 코드를 읽고 유지 관리하기가 어렵습니다. 따라서 한 줄에 한 문씩 작성하는 것이 좋습니다.
여러 줄에서 문 계속하기
문은 일반적으로 한 줄에 맞지만 너무 길면 공백, 밑줄 문자(_
), 캐리지 리턴으로 구성된 줄 연속 시퀀스를 사용하여 다음 줄로 이어서 작성할 수 있습니다. 다음 예제에서는 MsgBox
실행 가능 문이 두 줄에 걸쳐 이어집니다.
Public Sub DemoBox()
Dim nameVar As String
nameVar = "John"
MsgBox("Hello " & nameVar _
& ". How are you?")
End Sub
암시적 줄 연속
대부분의 경우 밑줄 문자(_
)를 사용하지 않고도 다음 줄에서 문을 이어서 작성할 수 있습니다. 다음 구문 요소는 다음 코드 줄의 문을 암시적으로 계속 이어갑니다.
쉼표(
,
) 뒤. 예시:Public Function GetUsername(ByVal username As String, ByVal delimiter As Char, ByVal position As Integer) As String Return username.Split(delimiter)(position) End Function
여는 괄호(
(
) 뒤 또는 닫는 괄호()
) 앞. 예시:Dim username = GetUsername( Security.Principal.WindowsIdentity.GetCurrent().Name, CChar("\"), 1 )
여는 중괄호(
{
) 뒤 또는 닫는 중괄호(}
) 앞. 예시:Dim customer = New Customer With { .Name = "Terry Adams", .Company = "Adventure Works", .Email = "terry@www.adventure-works.com" }
자세한 내용은 개체 이니셜라이저: 명명된 형식 및 무명 형식 또는 컬렉션 이니셜라이저를 참조하세요.
XML 리터럴 내에서 여는 포함된 식(
<%=
) 뒤 또는 닫힌 포함된 식(%>
) 앞. 예시:Dim customerXml = <Customer> <Name> <%= customer.Name %> </Name> <Email> <%= customer.Email %> </Email> </Customer>
자세한 내용은 XML에 포함된 식을 참조하세요.
연결 연산자(
&
) 뒤. 예시:cmd.CommandText = "SELECT * FROM Titles JOIN Publishers " & "ON Publishers.PubId = Titles.PubID " & "WHERE Publishers.State = 'CA'"
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
대입 연산자(
=
,&=
,:=
,+=
,-=
,*=
,/=
,\=
,^=
,<<=
,>>=
) 뒤. 예시:Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath)
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
식 내에서 이진 연산자(
+
,-
,/
,*
,Mod
,<>
,<
,>
,<=
,>=
,^
,>>
,<<
,And
,AndAlso
,Or
,OrElse
,Like
,Xor
) 뒤. 예시:Dim memoryInUse = My.Computer.Info.TotalPhysicalMemory + My.Computer.Info.TotalVirtualMemory - My.Computer.Info.AvailablePhysicalMemory - My.Computer.Info.AvailableVirtualMemory
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
Is
및IsNot
연산자 뒤. 예시:If TypeOf inStream Is IO.FileStream AndAlso inStream IsNot Nothing Then ReadFile(inStream) End If
자세한 내용은 기능별로 나열된 연산자를 참조하세요.
멤버 한정자 문자(
.
) 뒤와 멤버 이름 앞. 예시:Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath)
단,
With
문을 사용하거나 형식의 초기화 목록에 값을 제공하는 경우 멤버 한정자 문자 뒤에 줄 연속 문자(_
)를 포함해야 합니다.With
문 또는 개체 초기화 목록을 사용하는 경우 대입 연산자(예:=
) 뒤에 줄을 바꾸는 것을 고려하세요. 예시:' Not allowed: ' Dim aType = New With { . ' PropertyName = "Value" ' Allowed: Dim aType = New With {.PropertyName = "Value"} Dim log As New EventLog() ' Not allowed: ' With log ' . ' Source = "Application" ' End With ' Allowed: With log .Source = "Application" End With
자세한 내용은 With...End With 문 또는 개체 이니셜라이저: 명명된 형식 및 무명 형식을 참조하세요.
XML 축 속성 한정자 뒤(
.
,.@
또는...
). 단,With
키워드를 사용하는 경우에 멤버 한정자를 지정할 때는 줄 연속 문자(_
)를 포함해야 합니다. 예시:Dim customerName = customerXml. <Name>.Value Dim customerEmail = customerXml... <Email>.Value
자세한 내용은 XML 축 속성을 참조하세요.
특성을 지정하는 경우 보다 작은 기호(<) 뒤 또는 보다 큰 기호(
>
) 앞. 또한 특성을 지정하는 경우 보다 큰 기호(>
) 뒤. 그러나 어셈블리 수준 또는 모듈 수준 특성을 지정하는 경우에는 줄 바꿈 문자(_
)를 포함해야 합니다. 예시:< Serializable() > Public Class Customer Public Property Name As String Public Property Company As String Public Property Email As String End Class
자세한 내용은 특성 개요를 참조하세요.
쿼리 연산자(
Aggregate
,Distinct
,From
,Group By
,Group Join
,Join
,Let
,Order By
,Select
,Skip
,Skip While
,Take
,Take While
,Where
,In
,Into
,On
,Ascending
,Descending
) 앞 및 뒤. 여러 키워드(Order By
,Group Join
,Take While
,Skip While
)로 구성된 쿼리 연산자의 키워드 사이에서는 줄바꿈을 할 수 없습니다. 예시:Dim vsProcesses = From proc In Process.GetProcesses Where proc.MainWindowTitle.Contains("Visual Studio") Select proc.ProcessName, proc.Id, proc.MainWindowTitle
자세한 내용은 쿼리를 참조하세요.
For Each
문의In
키워드 뒤. 예시:For Each p In vsProcesses Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}", p.ProcessName, p.Id, p.MainWindowTitle) Next
자세한 내용은 For Each...Next 문을 참조하세요.
컬렉션 이니셜라이저의
From
키워드 뒤. 예시:Dim days = New List(Of String) From { "Mo", "Tu", "We", "Th", "F", "Sa", "Su" }
자세한 내용은 컬렉션 이니셜라이저를 참조하세요.
주석 추가
소스 코드가 언제나 자명한 것은 아닙니다. 해당 소스 코드를 작성한 프로그래머에게도 설명이 필요한 경우가 있습니다. 따라서 대부분의 프로그래머는 코드를 문서화하기 위해 포함된 주석을 적극적으로 활용합니다. 코드의 주석은 나중에 코드를 읽거나 작업하는 사람에게 프로시저나 특정 명령에 대해 설명할 수 있습니다. Visual Basic은 컴파일하는 동안 주석을 무시하며 주석은 컴파일된 코드에 영향을 주지 않습니다.
주석 줄은 아포스트로피('
)로 시작하거나 REM
으로 시작하고 공백으로 끝납니다. 문자열 내를 제외하면 코드의 어느 곳에나 추가할 수 있습니다. 문에 주석을 추가하려면 문 뒤에 아포스트로피 또는 REM
을 삽입한 다음 주석을 입력합니다. 댓글은 별도의 줄에 따로 작성할 수도 있습니다. 다음 예제에서는 이러한 가능성을 보여 줍니다.
' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.
컴파일 오류 확인
코드 줄을 입력한 후 해당 줄이 물결 모양의 파란색 밑줄과 함께 표시되면(오류 메시지도 표시될 수 있음) 문에 구문 오류가 있는 것입니다. 작업 목록을 보거나 마우스 포인터로 오류를 가리키고 오류 메시지를 읽어 문의 잘못된 부분을 찾고 이를 수정해야 합니다. 프로그램은 코드의 모든 구문 오류를 수정할 때까지 올바르게 컴파일되지 않습니다.
관련 단원
용어 | 정의 |
---|---|
할당 연산자 | = , *= , &= 등의 대입 연산자를 다루는 언어 참조 페이지에 대한 링크를 제공합니다. |
연산자 및 식 | 요소를 연산자와 결합하여 새 값을 산출하는 방법을 보여 줍니다. |
방법: 코드에서 문 분리 및 결합 | 단일 문을 여러 줄로 나누는 방법과 여러 문을 같은 줄에 배치하는 방법을 보여 줍니다. |
방법: Label 문 | 코드 줄에 레이블을 지정하는 방법을 보여 줍니다. |
.NET