Visual Basic .NET


!-- HTML generated using hilite.me -->

Module Hello
Sub Main()
Console.WriteLine("Hello, World!")
End Sub
End Module

1 개요

마이크로소프트C\#과 함께 출시한 .NET Framework 기반의 프로그래밍 언어. Visual Basic 6.0에서 파생되었지만 차이점도 많다. 때문에 Visual Basic 6.0을 쓰던 유저들이 새로운 기반의 언어로 넘어가기에 거부감이 많아 사용자가 많지 않았지만, VB 6.0 지원이 중단되고 최신 운영체제로 가면서 동작하지 않는 기능이 많아지고, 강력해진 새로운 확장 라이브러리 및 기본 컨트롤도 개선되는 등 상당한 발전을 보여 VB.NET으로 사용자가 많이 넘어오게 되었다.

비주얼 스튜디오나 닷넷 개발 환경 또는 모노 컴파일러를 통해 개발이 가능하다. 또는 대안 컴파일러로 샤프 디벨롭 같은 툴도 있다.

근데, 확실히 C#보다는 많이 알고 있지 않아서 그런지 몰라도 VB.NET이라는 키워드 붙이지 않고 .NET이라고 하고 찾을 경우 C# 자료들이 많이 나온다. (VB.NET이라고 쳐도 C#이 같이 나오는건 함정)

VB.NET이건 C#이건 같은 .NET Framework 라이브러리를 사용하기 때문에 사실상 체감하는 차이라고 한다면 문법과 언어 자체 특성의 차이 밖에 없다.

2 특징

2.1 My Namespace(네임스페이스)

My Namespace는 응용 프로그램에 일곱 가지의 기능을 제공한다. (C#에서도 지원하지만 애초에 VB.NET에 맞게 개발되어 있다.)

오브젝트명목적
My.Computer당신의 컴퓨터에 대한 이름, 메모리, 시간, 네트워크 등의 정보를 제공함.
My.Application현재 응용프로그램의 실행경로, 어셈블리 정보 (이름이나 버전 같은 것) 그리고 환경 변수들을 제공함.
My.User윈도우에 해당되어 있는 이름 같은 것을 가져옴. 또, 사용자가 특정 역할에 속하는지도 확인 가능함.
My.Forms프로젝트에 있는 모든 폼의 참조를 제공함.
My.WebServices웹 서비스에서 사용되는 프록시 서버에 대한 접근 권한을 줌.
My.Settings읽거나 저장하는 응용 프로그램 구성 설정이 가능
My.Resources현재 응용프로그램에서 사용중인 리소스 정보를 읽을 수 있음

2.2 IsNot 연산자

If Not A = B Then 를 If A IsNot B Then 으로 사용하는 연산자다.
If Not A = B Then의 의미 : 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부터는 메서드는 괄호로 묶게 되어있다.
단적인 예로 Visual Basic 6.0에서 MsgBox는 다음과 같이 사용한다.

    MsgBox "Hello World!"

물론 괄호를 넣는다고 오류가 나지는 않지만 보통은 괄호를 넣고 사용하지 않는다.

VB.NET의 경우는

    MsgBox("Hello World!")

와 같이 사용한다. 괄호를 넣지 않을 시엔 메서드는 괄호로 묶어야 합니다. 라는 오류가 뜬다.

3.2 For문 문법 차이

둘째로는, For문의 차이이다. Visual Basic 6.0에서의 For문에는 For문 내에서 형식을 지정하며 선언이 불가능하다.


!-- HTML generated using hilite.me -->

Module Hello
Sub Main()
For i = 1 to 10 step 1
Console.Writeline(i)
Next
End Sub
End Module


그러나 VB.NET에서는 형식을 지정하며 선언이 가능하다.


!-- HTML generated using hilite.me -->

Module Hello
Sub Main()
For i As Integer = 1 to 10 step 1
Console.Writeline(i)
Next
End Sub
End Module

물론 VB.NET에서 Visual Basic 6.0 형태가 안되는건 아니다.

3.3 디자인에서의 컨트롤 배열 미지원

기존 Visual Basic 6.0에서는 컨트롤 배열이라는 것을 사용해서 폼의 컨트롤을 관리할 수 있었다. 컨트롤 배열로 이벤트 처리기 공유, 컨트롤 그룹 반복 및 런타임에 컨트롤 추가에 대한 기능을 제공했었는데 이제 VB.NET에서 부터는 지원하지 않는다. 대신 Handles 뒤에 , (콤마/쉼표)를 이용해서 여러개의 컨트롤에 이벤트 처리 메서드를 공유할 수 있게 되었다.

VB.NET에서 다음과 같이 사용한다.

!-- HTML generated using hilite.me -->

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를 띄우는 방법


!-- HTML generated using hilite.me -->

Module Hello
Sub Main()
Console.WriteLine("Hello, World!")
End Sub
End Module

C#에서 Hello World를 띄우는 방법


!-- HTML generated using hilite.me -->

using System;
public class Hello2
{
public static void Main()
{
Console.WriteLine("Hello, World!");
}
}

다음의 두 코드들을 보면 Hello World를 사용하는 방식이 비슷하다는 것을 느낄 수 있을 것이다.
그런데 여기서 C#에는 using System;을 이용한 코드가 있는 반면, VB.NET에는 그런 코드가 없는데 그 이유는 VB.NET에는 기본적인 라이브러리들이 Import되어(C#에서 using과 같은 역할) 있기 때문이다.

4.2 VB.NET <=> C# 변환

구글로 들어가서 C# to VB.NET 또는 VB.NET to C#이라고 쳐보면 거의 완벽하게 C#과 VB.NET 코드가 변환된다.

변환 사이트는 다음과 같다.

[1]