코딩 · 프로그래밍 언어
초보자를 위한 Visual Basic .NET 기초 튜토리얼
핵심 답변
Visual Basic .NET(VB.NET)은 Dim, If ... Then ... End If, For ... Next 같은 영어에 가까운 키워드를 쓰는 .NET 플랫폼용 객체지향 정적 타입 언어입니다. 대소문자를 구분하지 않으며 C#과 같은 .NET 라이브러리를 사용합니다. dotnet new console -lang VB로 프로젝트를 만들고 dotnet run으로 실행합니다. Microsoft Office 안의 매크로 언어인 VBA는 문법이 비슷한 이전 세대 친척입니다.
Visual Basic .NET이란 무엇이며 누가 쓰는가
VB.NET은 클래식 Visual Basic(VB6)의 .NET 후속 언어입니다. C#과 같은 중간 언어로 컴파일되므로 두 언어가 라이브러리를 공유하고 한 솔루션에서 함께 쓸 수도 있습니다. 주로 Windows 데스크톱 애플리케이션(Windows Forms, WPF), 사내 업무 도구, ASP.NET 웹 애플리케이션, 기존 VB 코드베이스의 유지보수에 쓰입니다.
Microsoft는 최신 .NET에서도 Visual Basic을 계속 지원하지만 큰 새 기능으로 언어를 발전시킬 계획은 없다고 밝혔고, 새 .NET 기능은 보통 C#에 먼저 나옵니다. 기존 VB 코드가 없는 새 프로젝트라면 C#이 더 흔한 선택이지만, VB.NET은 프로그래밍을 배우고 업무용 소프트웨어를 만들기에 여전히 읽기 쉬운 언어입니다.
설치와 Hello, world 실행
.NET SDK를 설치합니다(Windows, macOS, Linux). Windows의 Visual Studio에는 Visual Basic 템플릿과 시각적 폼 디자이너도 포함되어 있습니다.
dotnet new console -lang VB -o HelloVB
cd HelloVB
dotnet run
# Hello, world!' Program.vb
Imports System
Module Program
Sub Main(args As String())
Console.WriteLine("Hello, world!")
End Sub
End ModuleModule은 공유 프로시저를 담고, Sub Main은 진입점입니다. 주석은 작은따옴표 '로 시작합니다. 문장은 보통 줄 끝에서 끝나며 세미콜론이나 중괄호가 없습니다.
변수와 기본 타입
변수는 Dim name As Type으로 선언합니다. Option Infer On(기본값)이면 값을 대입할 때 타입을 생략할 수 있습니다. 위험한 암묵적 변환을 컴파일 오류로 만들려면 각 파일 맨 위에 Option Strict On을 쓰거나(또는 프로젝트에서 설정) 하세요.
| 타입 | 예시 | 설명 |
|---|---|---|
| Integer | Dim n As Integer = 42 | 32비트. Long은 64비트 |
| Double | Dim x As Double = 3.14 | 64비트 부동소수점 |
| Decimal | Dim price As Decimal = 19.99D | 정확한 십진수로, 금액에 적합 |
| String | Dim s As String = "hello" | 문자열은 &로 연결 |
| Char | Dim c As Char = "a"c | 문자 하나, 접미사 c |
| Boolean | Dim ok As Boolean = True | True / False |
| Date | Dim d As Date = #2026-01-15# | 날짜와 시간 값 |
Option Strict On
Module Types
Sub Main()
Dim name As String = "Ana"
Dim age = 30 ' inferred as Integer
Console.WriteLine(name & " is " & age.ToString())
Console.WriteLine($"Next year {name} is {age + 1}")
Console.WriteLine(7 / 2) ' 3.5 (always Double)
Console.WriteLine(7 \ 2) ' 3 (integer division)
Console.WriteLine(7 Mod 2) ' 1
End Sub
End Module제어 흐름
Dim score = 85
If score >= 90 Then
Console.WriteLine("A")
ElseIf score >= 80 Then
Console.WriteLine("B")
Else
Console.WriteLine("C")
End If
Select Case score
Case 90 To 100
Console.WriteLine("excellent")
Case 80 To 89
Console.WriteLine("good")
Case Else
Console.WriteLine("keep going")
End Select
For i = 1 To 3
Console.WriteLine($"{i} squared is {i * i}")
Next
Dim n = 3
Do While n > 0
n -= 1
Loop이 문장들은 Sub 안에 들어갑니다. For i = 1 To 3은 양 끝을 포함하며 거꾸로 세려면 Step -1을 추가합니다. For Each item In collection은 모든 컬렉션을 순회합니다. 반복문을 일찍 벗어나려면 Exit For나 Exit Do를 씁니다. 조건에는 AndAlso와 OrElse를 권장합니다. 결과가 정해지면 바로 평가를 멈추는 반면 And와 Or는 항상 양쪽을 모두 평가합니다.
Sub, 함수, 람다
Sub는 값을 반환하지 않고 Function은 반환합니다. 매개변수는 기본적으로 ByVal(복사본)로 전달되며, ByRef를 쓰면 프로시저가 호출자의 변수를 바꿀 수 있습니다. 매개변수는 기본값이 있는 Optional로 만들 수 있습니다.
Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
Sub Greet(Optional name As String = "world")
Console.WriteLine($"Hello, {name}!")
End Sub
Sub Increment(ByRef value As Integer)
value += 1
End Sub
' Inside Sub Main:
Dim x = 5
Increment(x) ' x is now 6
Greet() ' Hello, world!
Dim square = Function(n As Integer) n * n ' lambda
Console.WriteLine(square(Add(1, 2))) ' 9배열, List, Dictionary
Dim nums() As Integer = {3, 1, 2}
Dim five(4) As Integer ' 5 elements, indexes 0 to 4
Array.Sort(nums)
Console.WriteLine(String.Join(", ", nums)) ' 1, 2, 3
Dim names As New List(Of String) From {"Ana", "Ben"}
names.Add("Cleo")
Console.WriteLine(names.Count) ' 3
Dim ages As New Dictionary(Of String, Integer)
ages("Ana") = 30
ages("Ben") = 17
For Each pair In ages
Console.WriteLine($"{pair.Key}: {pair.Value}")
Next배열과 리스트는 0부터 시작하며 괄호로 인덱싱합니다: nums(0). 제네릭 타입은 Of를 씁니다. List(Of String)은 C#의 List<string>에 해당하는 VB 표기입니다. Dim five(4)는 길이가 아니라 상한을 선언하므로 요소가 다섯 개인 배열이 됩니다.
대표 기능: 클래스, 속성, LINQ 쿼리
VB.NET은 완전한 객체지향 언어입니다. 클래스는 속성, 메서드, 생성자(Sub New), 상속(Inherits), 인터페이스(Implements), 이벤트(Event, RaiseEvent, Handles)를 가집니다. LINQ 쿼리는 읽기 쉬운 쿼리 문법으로 쓸 수 있습니다.
Public Class Person
Public Property Name As String
Public Property Age As Integer
Public Sub New(name As String, age As Integer)
Me.Name = name
Me.Age = age
End Sub
End Class
' Inside Sub Main:
Dim people As New List(Of Person) From {
New Person("Ana", 30),
New Person("Ben", 17)
}
Dim adults = From p In people
Where p.Age >= 18
Select p.Name
For Each adultName In adults
Console.WriteLine(adultName) ' Ana
NextVB는 대소문자를 구분하지 않으므로 Name과 name은 같은 식별자입니다. 생성자 안에서 Me.Name은 속성을, name은 매개변수를 가리킵니다. 그 밖에 VB 고유의 편의 기능으로 With ... End With 블록, XML 리터럴, 일반적인 작업을 위한 My 네임스페이스가 있습니다.
오류 처리
VB.NET은 구조적 예외 처리를 사용합니다: Try, Catch, Finally, Throw. Catch에는 When 필터를 넣을 수 있습니다. VB6와 VBA의 예전 방식인 On Error GoTo는 여전히 컴파일되지만 새 .NET 코드에서는 쓰지 말아야 합니다.
Function ParseAge(s As String) As Integer
Dim n As Integer
If Not Integer.TryParse(s, n) Then
Throw New FormatException($"Not a number: {s}")
End If
If n < 0 Then Throw New ArgumentOutOfRangeException(NameOf(s))
Return n
End Function
' Inside Sub Main:
Try
Console.WriteLine(ParseAge("abc"))
Catch ex As FormatException
Console.WriteLine("Error: " & ex.Message) ' Error: Not a number: abc
Finally
Console.WriteLine("done")
End Try작은 완성 프로그램: 단어 빈도
Imports System
Imports System.Collections.Generic
Imports System.Linq
Module WordCount
Sub Main()
Dim text = "the cat and the hat and the bat"
Dim counts As New Dictionary(Of String, Integer)
For Each word In text.Split(" "c)
If counts.ContainsKey(word) Then
counts(word) += 1
Else
counts(word) = 1
End If
Next
Dim top = counts.OrderByDescending(Function(kv) kv.Value).Take(2)
For Each kv In top
Console.WriteLine($"{kv.Key} {kv.Value}")
Next
End Sub
End Module
' the 3
' and 2VBA: Microsoft Office 안의 Visual Basic
Visual Basic for Applications(VBA)는 Excel, Word, Access 같은 Microsoft Office 애플리케이션에 내장된 매크로 언어입니다. .NET이 아니라 클래식 Visual Basic을 기반으로 하며, Office 애플리케이션 안에서 실행되고, Office 객체 모델(통합 문서, 범위, 문서)을 사용하고, VBA 편집기(Windows에서 Alt+F11)에서 편집합니다. Dim, If, For, Sub의 기본 문법은 같아서 VB.NET 지식이 VBA에도 도움이 됩니다.
' VBA in Excel: write the squares of 1 to 5 into column A
Sub FillSquares()
Dim i As Long
For i = 1 To 5
Cells(i, 1).Value = i * i
Next i
MsgBox "Done"
End Sub다음 단계
- Microsoft Learn의 Visual Basic 문서. 시작 가이드와 언어 레퍼런스가 있습니다.
- .NET 기본 클래스 라이브러리(컬렉션, 파일, LINQ)를 익히세요. C#과 공유됩니다.
- 데스크톱 앱을 만들려면 Visual Studio의 Windows Forms나 WPF 템플릿을 사용해 보세요.
- Office 자동화에는 사용하는 애플리케이션에 맞는 Microsoft Learn의 VBA 레퍼런스를 읽어 보세요.
자주 묻는 질문
Visual Basic .NET은 끝난 언어인가요?
아니요. 현재 .NET 버전과 Visual Studio에서 지원되지만 Microsoft가 큰 새 언어 기능을 추가할 계획은 없으므로, 대부분의 새 .NET 프로젝트는 C#을 선택합니다.
VB.NET과 VBA의 차이는 무엇인가요?
VB.NET은 독립 실행형 애플리케이션을 만드는 완전한 .NET 언어입니다. VBA는 Excel 같은 Office 애플리케이션 안에서 실행되는, 클래식 Visual Basic 기반의 매크로 언어입니다. 문법은 비슷하지만 런타임과 라이브러리가 다릅니다.
VB.NET과 C# 중 무엇을 배워야 하나요?
VB 코드를 유지보수하거나 매우 읽기 쉬운 문법을 원한다면 VB.NET도 괜찮습니다. 새 프로젝트, 취업 기회, 최신 .NET 기능을 생각하면 보통 C#이 더 나은 투자이며, 배운 라이브러리는 두 언어 사이에서 그대로 통합니다.
Visual Basic은 대소문자를 구분하나요?
아니요. Dim Total, total, TOTAL은 모두 같은 변수를 가리키며, 편집기가 보통 대소문자를 자동으로 맞춰 줍니다.