Visual Basic .NET
(♥ 0)
1. 개요[편집]
Module Hello Sub Main() Console.WriteLine("Hello, World!") End SubEnd Module
마이크로소프트가 C\#과 함께 출시한 .NET Framework 기반의 프로그래밍 언어. Visual Basic 6.0에서 파생되었지만 차이점도 많다. 때문에 Visual Basic 6.0을 쓰던 유저들이 새로운 기반의 언어로 넘어가기에 거부감이 많아 사용자가 많지 않았다. 또한 객체 지향 언어라서 절차 지향인 VB 6.0 소스 코드가 VB.NET과 호환되지 않아 아예 처음부터 코딩해야 한다. 마이크로소프트도 이 문제를 몰랐던 건 아니었기에 Visual Studio 2008까지는 VB 6.0 변환기를 포함했으나 완전히 1:1로 변환할 수 있는 것도 아니었고, Visual Studio 2010부터는 변환기가 삭제되었다. 그러나 VB 6.0 지원이 중단되고 최신 운영체제로 가면서 동작하지 않는 기능이 많아지고, 강력해진 새로운 확장 라이브러리 및 기본 컨트롤도 개선되는 등 상당한 발전을 보여 많은 사용자들이 VB.NET으로 넘어오게 되었다.[1]
비주얼 스튜디오나 닷넷 개발 환경 또는 모노 컴파일러를 통해 개발이 가능하다. 또는 대안 컴파일러로 샤프디벨롭 같은 것도 있다.
.NET Framework 기반이지만 C\#이라는 그야말로 .NET Framework를 위하여 새롭게 만들어진 언어가 존재하기 때문에 C\#에 비해 인지도는 떨어지는 편이다. 하지만 .NET 언어중 C# 다음으로 수요가 많다. 그리고 VB.NET과 C\#은 같은 .NET Framework 라이브러리를 사용하기 때문에 사실상 문법과 일부 런타임 라이브러리를 제외하면 기능적으로는 큰 차이가 없기도 하다.[2]
2. 특징[편집]
2.1. My Namespace(네임스페이스)[편집]
My Namespace는 응용 프로그램에 일곱 가지의 기능을 제공한다. (C#에서도 지원하지만 애초에 VB.NET에 맞게 개발되어 있다.)
2.2. IsNot 연산자[편집]
If Not A = B Then
를 If A IsNot B Then
으로 사용하는 연산자다.If Not A = B Then의 의미: A = B를 검사 후 그 검사 결과가 A = B의 반대 되는 결과일 시에만 If문 처리
If A IsNot B Then의 의미: A가 B가 아닐 경우에만 If문 처리
두 개의 처리 결과는 같다.
2.3. WithEvent 선언자[편집]
- WithEvents를 사용하지 않으면 AddHandler를 사용해야 하지만 WithEvents를 사용 시 Handles 뒤에 (변수이름).(이벤트명) 형식으로 사용이 가능하다
2.4. WPF의 지원[편집]
- C#과 동일하게 WPF 프로젝트를 만들어서 사용할 수 있다.
3. Visual Basic 6.0와의 차이점[편집]
3.1. 메서드 괄호의 차이[편집]
Visual Basic 6.0에서는 메서드를 괄호는 어디에 대입할 때 등에만 사용했다. 오히려 호출할 시 괄호를 쓸 경우 오류가 발생한다. 그러나 VB.NET부터는 항상 메서드는 괄호로 묶게 되어 있다. Python 2에서 print 문을 쓸 때 텍스트를 괄호로 묶지 않아도 됐지만 Python 3에서는 괄호로 묶어야 하게 된 것과 비슷한 경우.
단적인 예로 Visual Basic 6.0에서 MsgBox는 다음과 같이 사용한다.
MsgBox "Hello World!"
VB.NET의 경우는
MsgBox("Hello World!")
와 같이 사용한다. 괄호를 넣지 않을 시엔 메서드는 괄호로 묶어야 합니다. 라는 오류가 뜨며 매개 변수를(위에선 "Hello World!") 전달하지 않을 때에도 괄호를 반드시 넣어야 한다. 예를 들어
Randomize()
가 있다.다만 Visual Studio 2017 버전 기준으로는 자동으로 괄호를 삽입하므로 큰 문제는 없다. 6.0 모양으로 입력 시 Enter 키를 누르면 자동으로 괄호가 들어가진다.
3.2. For문 문법 차이[편집]
둘째로는 For문의 차이이다. Visual Basic 6.0에서의 For문에는 For문 내에서 형식을 지정하며 선언이 불가능하다.
Module Hello Sub Main() For i = 1 to 10 step 1 Console.Writeline(i) Next End SubEnd Module
그러나 VB.NET에서는 형식을 지정하며 선언이 가능하다.
Module Hello Sub Main() For i As Integer = 1 to 10 step 1 Console.Writeline(i) Next End SubEnd Module
물론 그 역으로 VB.NET에서 Visual Basic 6.0과 동일한 방법으로 For 문을 정의할 수 있다.
3.3. 디자인에서의 컨트롤 배열 미지원[편집]
기존 Visual Basic 6.0에서는 컨트롤 배열이라는 것을 사용해서 폼의 컨트롤을 관리할 수 있었다. 컨트롤 배열로 이벤트 처리기 공유, 컨트롤 그룹 반복 및 런타임에 컨트롤 추가에 대한 기능을 제공했었는데 VB.NET부터는 지원하지 않는다. 대신 Handles 뒤에 , (콤마/쉼표)를 이용해서 여러 개의 컨트롤에 이벤트 처리 메서드를 공유할 수 있게 되었다.
VB.NET에서 다음과 같이 사용한다.
Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click
4. VB.NET과 C#의 유사점[편집]
4.1. 같은 라이브러리 사용[편집]
Visual Basic.NET에서 Hello World를 띄우는 방법
Module Hello Sub Main() Console.WriteLine("Hello, World!") End SubEnd Module
C#에서 Hello World를 띄우는 방법
using System;
public class Hello2
{
public static void Main()
{
Console.WriteLine("Hello, World!");
}
}
4.2. VB.NET ↔ C# 변환[편집]
VB.NET과 C#은 둘 다 같은 .NET 프레임워크 기반이기 때문에 거의 완벽하게 C#과 VB.NET 코드를 변환할 수 있다. 실제로 https://converter.telerik.com/에서 두 언어간 코드를 변환하는 서비스를 제공한다.
이 문서의 내용 중 전체 또는 일부는 2024-08-10 18:41:14에 나무위키 Visual Basic .NET 문서에서 가져왔습니다.
[1] 다만 VB 6.0이 완전히 없어진것은 아니며, Microsoft Office에 내장되어 있는 프로그래밍 언어가 VB 6.0을 기반으로 한 VBA이다. 당연히 VB.NET와 호환이 되지 않는다.[2] 두 언어 모두 공통 중간 언어(CIL)로 번역되어 사용되기에 일부 요소를 제외하고는 속도에서 차이가 별로 없다.