내보내기(0) 인쇄
모두 확장

Visual Basic 2005 개요

Ken Getz

MCW Technologies, LLC

업데이트한 날짜: 2005년 12월

요약 : My Visual Basic, IntelliSense, 편집하며 계속하기, 자동 고침, 내 코드만, Windows Forms의 향상된 기능을 포함한 Visual Basic 2005의 새로운 기능에 대한 개요를 제공합니다(32페이지/인쇄 페이지 기준).

참고    이 기사는 Visual Basic 2005의 최종 릴리스를 기준으로 업데이트되었습니다.

목차

소개 소개
생산성 향상 기능 생산성 향상 기능

My 네임스페이스 My 네임스페이스
IntelliSense 및 코드 조각 IntelliSense 및 코드 조각
편집하며 계속하기 편집하며 계속하기
디버거 데이터 설명 디버거 데이터 설명
자동 고침 자동 고침
디자인 타임 식 계산 디자인 타임 식 계산
예외 도우미 예외 도우미
Windows Forms의 향상된 기능 Windows Forms의 향상된 기능
데이터 작업 데이터 작업
내 코드만 내 코드만
ClickOnce 설치 ClickOnce 설치
언어 관련 혁신 사항 언어 관련 혁신 사항
연산자 오버로드 연산자 오버로드
Generic Generic
IsNot 키워드 IsNot 키워드
Using 키워드 Using 키워드
부호 없는 정수 형식 부호 없는 정수 형식
부분 클래스 부분 클래스
BackgroundWorker 개체 BackgroundWorker 개체
요약 요약

소개

Microsoft Visual Studio 2005는 Visual Basic 개발자를 위해 혁신적인 언어 구문, 새로운 컴파일러 기능, 대폭 강화된 생산성 및 향상된 디버깅 환경이 새롭게 추가되면서 성능이 크게 개선되었습니다. Visual Studio 2005에는 IntelliSense 코드 조각, Windows Forms 디자이너 업데이트, IntelliSense 필터링, 디버거 데이터 설명, 예외 도우미 등을 비롯하여 다양한 생산성 향상 기능이 포함되어 있습니다. 또한 Visual Basic 2005에는 generic, 부호 없는 형식, 연산자 오버로드 등과 같은 많은 언어 혁신 사항이 추가되었습니다. 이 문서에서는 Visual Basic 2005의 몇 가지 새로운 기능을 샘플을 통해 소개하겠습니다.

생산성 향상 기능

Visual Studio 2005 및 Visual Basic 2005에는 개발자의 생산성을 높여 주는 다양한 기능과 도구가 새롭게 추가되었습니다. 다음 섹션에서 몇 가지만 간략하게 설명하겠습니다.

My 네임스페이스

.NET Framework의 일부로 즉시 사용 가능한 방대한 양의 클래스 집합에서 필요한 기능을 찾을 수 있다고 생각해 보십시오. 또한 여러 코드 줄을 사용해야 하는 작업을 단일 참조를 사용해 완료할 수 있다면 어떻겠습니까 이전 버전의 Visual Basic 또는 Visual Basic 6의 프로그래밍 환경보다 생산성이 향상된 환경을 상상해 보십시오. Visual Basic 2005에는 My 네임스페이스가 추가되어 이와 같은 다양한 목표를 달성할 수 있습니다.

Windows 바탕 화면의 바로 가기를 사용하여 Windows에서 필요한 응용 프로그램과 파일을 손쉽게 찾을 수 있는 것처럼 My 네임스페이스 클래스에서는 .NET Framework에서 일반적으로 사용되는 기능의 바로 가기를 제공합니다. 또한 My 네임스페이스에는 이전에는 찾아서 사용하는 것이 어렵거나, 관리되지 않는 API 호출 없이는 사용할 수 없었던 기능이 추가되었습니다.

My 네임스페이스에는 다음과 같은 클래스가 포함되어 있으며, 각 클래스에는 갖가지 유용한 멤버가 들어 있습니다.

  • Application

  • Computer

  • Forms

  • Resources

  • Settings

  • User

예를 들어, Visual Basic 2005에서 오디오 파일을 재생하려면 DirectX나 Win32 API 호출을 사용하는 대신 다음과 같은 코드 한 줄만 작성하면 됩니다.


My.Computer.Audio.Play("C:\Beep.wav")

또는 다음과 같은 코드를 작성하여 시스템 소리를 재생할 수도 있습니다.


My.Computer.Audio.PlaySystemSound(SystemSounds.Asterisk)

뿐만 아니라 My 네임스페이스는 상당한 양의 코드를 대체하는 기능을 제공합니다. 예를 들어, 다음 코드에서는 간단한 코드를 사용하여 컴퓨터에 ping 테스트를 수행하는 방법을 보여 줍니다.


If My.Computer.Network.IsAvailable Then
    If My.Computer.Network.Ping("http://www.microsoft.com") Then
        MsgBox("Microsoft's site is available.")
    End If
End If

파일 시스템 작업은 훨씬 간단해졌습니다. My.Computer.FileSystem에서는 검색 가능하고 사용이 편리한 플랫 상태 비저장 방식으로 일반적인 파일 시스템 작업을 수행합니다. My.Computer.FileSystem은 주로 파일 및 폴더의 복사, 삭제, 이동 및 이름 바꾸기 같은 파일 시스템 작업을 수행합니다. 예를 들어, 개발자는 파일 및 폴더를 비롯하여 파일 크기, 인코딩 등과 같은 드라이브 속성을 자주 사용하게 됩니다. 이때 My.Computer.FileSystem을 사용하면 일반적으로 참조되는 파일, 폴더 및 드라이브 속성을 손쉽게 가져올 수 있습니다. 예를 들어, 시스템의 각 드라이브 크기를 표시하려는 경우 다음과 같이 코드를 작성할 수 있을 것입니다.


For Each drv As DriveInfo In My.Computer.FileSystem.Drives
    If drv.IsReady Then
        Debug.WriteLine(String.Format( _
         "{0}:\ {1:N0}", drv.Name, drv.TotalSize))
    End If
Next

My.User 클래스에서는 NameIsInRole 속성을 포함하여 현재 사용자에 관한 정보를 제공합니다. 다음 코드를 사용하면 현재 사용자의 정보는 물론 사용자가 관리자인지 여부도 표시할 수 있습니다.


MsgBox(My.User.Identity.Name & ":" & _
    My.User.IsInRole("Administrators"))

현재 사용자의 응용 프로그램 데이터 폴더를 확인하려는 경우 다음과 같은 간단한 코드를 사용하면 됩니다.

MsgBox( _
My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData)

또한 My 네임스페이스에는 Visual Basic 6의 다양한 RAD 기능을 .NET 개발 플랫폼으로 반환하는 기능이 추가되었습니다. 예를 들어, Visual Basic 개발자는 지금까지 이름으로 폼에 액세스하고 런타임 엔진을 사용하여 사용 가능한 모든 폼 클래스 컬렉션을 유지 관리했습니다. 하지만 새로운 My.Forms 컬렉션을 사용하면 개발자는 다음과 같이 솔루션의 일부로 만들어진 폼 클래스를 열어 상호 작용하는 코드를 작성할 수 있습니다.

My.Forms.HelpForm.Show()

뿐만 아니라 My 네임스페이스에는 Forms, WebServices, Resources 및 Settings를 포함하여 동적으로 만들어진 다른 여러 컬렉션이 포함되어 있습니다. My.WebServices 컬렉션은 개발자가 IntelliSense 및 강력한 형식을 사용하는 웹 서비스 메서드를 손쉽게 호출할 수 있도록 하는 것은 물론 호출 과정도 단순화합니다. 예를 들어, Numbers라는 웹 서비스 메서드가 프로젝트에서 이미 선언되었다고 가정하겠습니다. 웹 서비스의 NumToStr 메서드를 호출하는 과정은 다음과 같이 매우 간단합니다.


MsgBox(My.WebServices.Numbers.NumToStr(123.45))

My 네임스페이스는 Visual Basic 개발자가 여러 네임스페이스를 검색하는 수고를 덜고 보다 적은 노력으로 목표를 달성할 수 있도록 단순함을 고려하여 개발되었습니다. 이전 릴리스에서 까다로웠던 많은 작업들이 이제는 단일 참조만으로 해결됩니다.

IntelliSense 및 코드 조각

Visual Basic 2005에서는 이전 버전보다 능동적인 방식으로 코딩 오류를 경고합니다. 예를 들어, 그림 1에서처럼 변수에 값이 할당되기 전에 이를 사용하려고 하면 경고 메시지가 트리거됩니다.

vbnet2005_preview-fig1.gif

그림 1. Visual Basic 에서는   디자인   타임에   일반적인   오류를   감지합니다.

새 로운 코드 조각 기능인 IntelliSense 코드 조각을 사용하면 Visual Basic 코드 편집기에서 마우스 오른쪽 단추를 클릭하고 수행할 작업을 계층적 목록에서 선택할 수 있습니다. 작업을 선택하면 미리 작성된 코드가 소스 파일에 자동으로 삽입됩니다. 그림 2에서는 이 기능이 실제로 적용된 모습을 보여 줍니다.

vbnet2005_preview-fig2.gif

그림 2. Visual Studio 내의 IntelliSense 코드   조각을   사용하여   코딩   절차를   단순화합니다.

코 드 조각이 삽입되면 그림 3에서처럼 하드 코드된 경로 및 컨트롤 참조 같은 항목을 수정할 수 있습니다. 조정 작업이 끝나면 삽입된 코드는 해당 환경 내에서 올바르게 작동할 수 있습니다. 이 코드 조각은 적절한 온라인 도움말 항목에 대한 참조가 들어 있으며 변경해야 할 부분을 알려 주는 도구 설명도 제공합니다. 코드 조각 삽입 옵션을 사용하면 현재 프로시저 내에 있는지 여부를 확인하는 것은 물론 현재 컨텍스트에 따라 사용할 수 있는 코드 조각 목록을 만들 수 있습니다.

vbnet2005_preview-fig3.gif

그림 3. 코드   조각에서   값을   대체하여   코드가   올바르게   작동하도록   합니다 . 코드   조각의   자리   표시자를   이동하려면 Tab 키를   사용합니다.

물 론 코드 조각을 직접 만들 수도 있습니다. 이러한 IntelliSense 항목은 폴더 계층 구조(코드 편집기 내에 나타나는 메뉴를 결정하는 폴더 계층 구조) 내에 XML 파일로 저장되며, 여러분은 이 XML 파일을 자신의 도구 설명과 도움말 참조로 장식하여 직접 만든 코드 조각을 저장할 수 있습니다.

편집하며 계속하기

신 속한 개발 시간은 Visual Basic에서의 개발 경험을 단적으로 나타내는 특징입니다. Visual Basic 6의 편집하며 계속하기 기능을 그리워하는 프로그래머에게는 더 없는 희소식이 아닐 수 없습니다! Visual Basic 2005에서는 디버깅 중에 코드를 변경하고 필요에 따라 코드 명령 포인터를 백업하며 수정된 내용으로 코드 줄을 다시 실행할 수 있습니다. 중단 모드에서 코드나 버그를 수정할 수 있을 뿐 아니라 거의 모든 코드 수정 작업을 수행할 수 있습니다. 물론, 일부 수정 작업의 경우에는 디자인 모드로 전환하여 프로젝트를 다시 빌드해야 하며 다른 방법은 없습니다. Visual Studio 2005의 이러한 변화는 수많은 Visual Basic 개발자들의 의지를 북돋아 주고 있습니다!

디버거 데이터 설명

Visual Studio .NET 2003을 사용한 디버그 모드에서는 커서를 문자열 같은 단순한 변수 위에 위치시켜 해당 변수 값을 살펴볼 수 있었습니다. Visual Studio 2005에서는 이 기능이 크게 향상되어 이제는 데이터 설명에서도 복합 형식을 지원합니다. 그림 4는 데이터 설명에 복합 형식에 대한 정보가 표시되고 해당 형식의 계층 구조 하위 수준을 표시하는 기능이 있음을 보여 주는 간단한 예제입니다. 값을 표시하는 것 외에 데이터 설명에서 값을 편집할 수도 있습니다.

vbnet2005_preview-fig4.gif

그림 4. Visual Studio 2005   데이터   설명의   기능이   대폭   향상되어   별도의   창을   로드하지   않고도   디버깅   중에   복잡한   데이터   구조를   탐색할     있습니다.

자동 고침

Visual Basic 2005에는 자동 고침 기능이 추가되어 잘못된 코드가 컴파일되지 않는 이유를 손쉽게 확인하는 것은 물론, 다양한 옵션을 선택하여 오류가 발생한 코드를 간단히 수정할 수 있습니다. 그림 5에서처럼 간단한 입력 오류가 발생한 경우 스마트 태그를 클릭하면 올바른 코드를 선택할 수 있는 제안 사항 목록이 나타납니다.

vbnet2005_preview-fig5.gif

그림 5. 자동   고침   기능을   사용하면   입력한   텍스트에   따라   적절한   제안   사항이   제공되어   입력   오류를   수정할     있습니다.

그림 6에서처럼 클래스를 사용하려고 하면서 네임스페이스를 가져오지 않거나 전체 클래스 이름을 제공하지 않으면 자동 고침의 스마트 태그에서 제안 사항을 제공합니다.

vbnet2005_preview-fig6.gif

그림 6. 네임스페이스를   가져오지   않은   경우   자동   고침을   사용하여   전체   이름을   입력할     있습니다.

읽기/쓰기 속성을 만든 다음 이를 읽기 전용으로 만들려고 하는 경우를 가정해 보십시오. 당연히 ReadOnly 키워드가 있겠지만 이제는 Set 블록에 무언가가 잘못되었음을 나타내는 파란색 "물결 무늬"가 표시되어 오류를 쉽게 확인할 수 있습니다(그림 7 참조).

vbnet2005_preview-fig7.gif

그림 7. 코드에   오류가   있음을   쉽게   확인할     있습니다 . 이에   대해   어떤   조치를   취해야   하는지   알기는   힘들   경우 Visual Basic   자동   고침을   사용하여   간단히   해결할     있습니다.

그림 8에서처럼 오류 근처에 표시되는 스마트 태그를 확장하면 대화 상자가 표시됩니다. 이 대화 상자에서 해결 방법을 선택한 다음 연결된 링크를 클릭하여 변경 작업을 수행합니다.

vbnet2005_preview-fig8.gif

그림 8. Visual Basic 오류   수정   대화   상자를   사용하면   수정   사항을   손쉽게   선택하고   적용할     있습니다.

디자인 타임 식 계산

Visual Studio 2005에는 Visual Basic 6에서 이전부터 친숙하게 사용하던 기능이 추가되었습니다. 바로 디자인 타임에 직접 실행 창에서 식을 계산하는 기능입니다. 이 기능은 직접 실행 창에서 Framework 메서드와 사용자가 정의한 메서드를 호출하여 메서드를 테스트하고 코드를 디버깅하는 등의 작업을 수행하는 데 유용합니다. 그림 9에서는 디자인 타임에 직접 실행 창에서 식을 계산하는 예제를 보여 줍니다.

vbnet2005_preview-fig9.gif

그림 9. Visual Basic 6   마찬가지로 Visual Basic 2005 에서도   디자인   타임에   직접   실행   창에서   계산을   수행할     있습니다.

또 한 작성한 모든 코드를 호출할 수 있습니다. 그 예로 그림 10에서는 폼의 클래스 내에서 코드를 호출하는 예제를 보여 줍니다. 물론 디자인 모드에서 직접 실행 창에 입력할 때도 중단 모드에서처럼 IntelliSense 도움말을 사용할 수 있습니다.

vbnet2005_preview-fig10.gif

그림 10. 코드가   폼의   클래스에   있는   경우라도   디자인   모드에서   직접   작성한   코드를   호출할     있습니다.

예외 도우미

Visual Studio 2005에서는 처리되지 않은 런타임 예외가 발생하는 경우 이를 지원하는 기능을 제공합니다. 예외 처리기 버블은 코드 줄 내의 정확한 위치를 가리켜 예외에 대한 표준 정보를 제공하는 것은 물론, 예외에 대해 조치해야 할 사항과 예외의 재발을 막기 위한 방법이 나와 있는 유용한 정보를 제시합니다. 그림 11에서는 실제로 적용된 예외 지원 버블을 보여 줍니다.

vbnet2005_preview-fig11.gif

그림 11. 새로운   예외   도우미를   사용하면   런타임   오류를   손쉽게   진단할     있습니다.

Windows Forms의 향상된 기능

Visual Studio 2005에는 Windows Forms 영역에 많은 기능이 새롭게 추가되었으며(디자인 타임 및 런타임 모두), 여기서 모두 소개하기 힘들 정도로 종류가 다양합니다. 이러한 기능 중 맞춤선과 위치 내 속성 편집의 두 가지를 사용하면 폼을 원하는 대로 훨씬 손쉽게 배열할 수 있습니다.

맞춤선을 사용하면 폼을 배열할 때 컨트롤을 다른 컨트롤과 손쉽게 정렬할 수 있습니다. 새 컨트롤을 한 컨트롤의 맨 위에, 그리고 다른 컨트롤의 오른쪽에 각각 정렬해야 할 수도 있을 것입니다. 그림 12에서는 이러한 정렬을 보여 줍니다. Button3을 Button1과 Button2의 가장자리에 가깝게 이동하면 그림 12에서처럼 Windows Forms 디자이너에 파란색 맞춤선이 표시됩니다. 이러한 맞춤선을 사용하여 Button3을 Button1의 오른쪽 가장자리와 Button2의 맨 위 가장자리에 정렬합니다.

vbnet2005_preview-fig12.gif

그림 12. 맞춤선을   사용하면   컨트롤을   다른   컨트롤의   가장자리에   정렬할     있습니다.

그 림 13에서처럼 Button3을 Button2에 세로로 이동하면 Button3의 텍스트가 Button2의 텍스트와 정렬되며 빨간색 맞춤선이 이를 나타냅니다. Button3을 계속 아래로 끌어 내리면 그림 14에서처럼 맞춤선이 이동합니다. 그러면 이제 Button3을 Button2의 맨 밑과 Button1의 오른쪽에 간단히 정렬할 수 있습니다.

vbnet2005_preview-fig13.gif

그림 13. 맞춤선을   사용하면   컨트롤의   텍스트를   간단히   정렬할     있습니다.

vbnet2005_preview-fig14.gif

그림 14. 맞춤선을   사용하면   가장자리를   따라   정렬할     있습니다 .

2005 릴리스의 Windows Forms 디자이너에는 기존 컨트롤 집합에 여러 가지 새로운 컨트롤이 추가되었습니다. 기존 Toolbar 컨트롤을 확장한 새로운 ToolStrip 컨트롤에는 다양한 Microsoft Office 2003 스타일의 사용자 인터페이스를 수행하는 응용 프로그램을 손쉽게 만들 수 있도록 하는 기능과 동작이 추가되었습니다. 뿐만 아니라 FlowLayoutPanel, TableLayoutPanel 및 관리되는 WebBrowser 컨트롤을 비롯하여 다른 유용한 컨트롤도 많이 추가되었습니다. SplitContainer 컨트롤은 이전 릴리스의 Panel 및 Splitter 컨트롤보다 배열 기능이 대폭 향상되었습니다. DataGridView 컨트롤 역시 기존 DataGrid 컨트롤에서 크게 개선되어 원하는 사용자 환경을 훨씬 손쉽게 구축할 수 있습니다.

데이터 작업

Visual Studio 2005 릴리스에 추가된 데이터 관련 기능을 여기서 모두 소개할 수는 없지만, 이 버전에서는 데이터 소스 창과 끌어서 놓기 데이터 바인딩 같은 두 가지 기능에 특히 주목할 만합니다. Visual Studio .NET 2002 및 2003에서는 특정 폼으로 끌어서 놓을 수 있는 다양한 데이터 어댑터 구성 요소를 제공하여 사용자 인터페이스 기능을 데이터 소스에 바인딩하는 작업을 단순화한 것이 특징이었습니다. 이 기법은 코드를 작성하는 것보다는 확실히 쉬웠지만 유지 관리에 영향을 준 것은 물론, 폼마다 개체를 개별적으로 연결하기 때문에 데이터 위치를 수정하기가 까다로웠습니다. Visual Studio 2005에서는 프로젝트 차원의 데이터 소스 창에서 응용 프로그램의 데이터를 전체적으로 볼 수 있습니다.

그 림 15에서처럼 데이터 소스 창을 사용하면 프로젝트 차원의 데이터 소스를 설정하여 응용 프로그램에서 사용할 항목을 선택할 수 있습니다. 특정 데이터 항목으로 작업해야 하는 경우 테이블 또는 필드 그룹을 폼으로 끌어 오면 Visual Studio 2005에서 자동으로 바인딩된 컨트롤을 만듭니다.

vbnet2005_preview-fig15.gif

그림 15. 데이터   소스   창을   사용하면   디자인   화면으로   끌어서   놓을     있는   프로젝트   차원의   데이터   소스를   만들     있습니다 . 또한   이러한   항목을   프로그래밍   방식으로   참조할     있습니다.

데 이터를 기존 컨트롤에 바인딩하는 작업 역시 매우 간단합니다. 데이터 소스 창의 필드를 기존 컨트롤로 끌어 오면 Visual Studio 2005가 데이터 소스 창에서 선택한 컨트롤 유형을 만들어 내고 자세히 검토할 필요가 없도록 적절한 바인딩 속성을 자동으로 설정합니다. 기존 컨트롤이 있는 경우에도 데이터 소스 창에서 끌어 올 수 있습니다. 기존 컨트롤로 끌어서 놓아도 바인딩이 설정됩니다. "Connect the Dots" 데이터 바인딩이라고도 하는 이러한 유형의 바인딩은 기존 컨트롤에 적절한 데이터 바인딩 속성을 설정합니다. 바인딩된 폼을 만들 때 데이터 소스 창에서 끌어 오든, 아니면 기존 컨트롤을 바인딩하든, 코드는 물론 각 폼의 개별 구성 요소에서도 더 이상 데이터 소스를 유지할 필요가 없습니다. 데이터 소스 창에서는 단일 위치에서 편리하게 모든 데이터 소스를 자동으로 관리합니다.

내 코드만

Visual Basic에서 새 프로젝트를 만들면, 대개의 경우 프로젝트에 자신이 직접 작성하지 않은 많은 코드가 포함됩니다. Visual Basic 2005에는 코드에서 단일 단계 디버깅을 수행할 때 직접 작성하지 않은 모든 코드를 항상 건너뛰는 옵션이 추가되었습니다. 이 동작은 내 코드만 사용 옵션(그림 16 참조)으로 제어하며, 이 옵션은 기본적으로 사용하도록 설정되어 있습니다.

vbnet2005_preview-fig16.gif

그림 16.   코드만   사용을   설정하면   직접   작성하지   않은   코드를   건너뛰므로   시간과   노력을   절감할     있습니다.

XML 코드 주석

코 드를 문서화하는 작업은 응용 프로그램의 중요한 부분입니다. Visual Basic 2005에는 코드에서 손쉽게 추출 및 구문 분석하고 설명서로 변환할 수 있는 XML 기반 주석을 만드는 기능이 추가되었습니다. 프로시저 외부에 ''' 부호(''' 부호로 시작하는 주석)를 입력한 다음 Enter 키를 누릅니다. 그림 17에서처럼 Visual Studio 2005에서는 XML 기반 주석 구조를 자동으로 만듭니다.

vbnet2005_preview-fig17.gif

그림 17. ''' 부호를   입력하면 XML 기반   코드   주석이   삽입됩니다 . 세부   정보를   입력하면   손쉽게   코드   설명서를   만들     있습니다.

<param> XML 요소의 내용으로 XML 주석에 매개 변수에 대한 설명을 입력하면, 해당 메서드를 사용하는 개발자는 코드를 작성할 때 이 설명을 포함한 IntelliSense 도움말을 확인하게 됩니다. 또한 Visual Studio에서 메뉴 항목을 선택하여 프로젝트 내의 XML 설명서에서 웹 기반 설명서를 만들 수 있습니다.

ClickOnce 설치 및 Reg-Free COM

일 반적으로는 .NET Framework를 기반으로 빌드된 응용 프로그램을 배포하는 일이 COM 기반 응용 프로그램을 배포하는 일보다 훨씬 간단합니다. 하지만 Visual Studio 2005를 사용하면 Windows 응용 프로그램을 훨씬 쉽게 배포할 수 있습니다. ClickOnce 기능이 새롭게 추가되어 안전하고 간단한 시스템 제어 방식의 설치 및 업데이트 메커니즘을 통해 데스크톱 응용 프로그램을 만들고 배포할 수 있는 것은 물론 필요에 따라 중앙에서 업데이트할 수도 있습니다.

.NET 1.0 릴리스 이후로, .NET Framework를 사용하여 작성된 대부분의 응용 프로그램(관리되는 응용 프로그램)은 격리되었습니다. 즉, 등록 및 공유 구성 요소를 사용하는 대신 모든 해당 구성 요소가 응용 프로그램에 로컬로 설치되었으며, 배포에 전혀 영향을 주지 않았습니다. 이를 통해 COM 개발자들은 설치된 구성 요소 버전을 관리할 때 발생하는 DLL 문제로부터 해방되었습니다.

뿐만 아니라 관리되는 Windows 응용 프로그램에는 웹 사이트에서 실행하는 기능이 있어 해당 콘텐츠를 항상 최신 상태로 유지할 수 있었습니다. 하지만 이러한 방식을 사용하면 보안 문제로 인해 많은 기술적인 제한 사항이 추가됩니다. 또한 Windows 응용 프로그램은 대개 응용 프로그램의 일부를 필요에 따라 다운로드하기 때문에 웹상에서 실행 속도가 느리며 기본적으로 오프라인에서의 사용은 지원되지 않습니다.

Visual Studio에 통합된 ClickOnce 기술을 사용하면 배포를 단순화하고 업데이트를 안정적이면서도 안전하게 수행할 수 있습니다. 또한 응용 프로그램을 로컬로 실행하면서 웹을 통해 효과적으로 배포 및 업데이트할 수 있습니다. 뿐만 아니라 ClickOnce를 사용하면 응용 프로그램의 설치와 지속적인 업데이트 작업을 손쉽게 수행할 수 있습니다. 새 버전의 응용 프로그램을 배포하는 대신 중앙 서버에서 업데이트를 배포하여 응용 프로그램의 변경된 부분만 업데이트할 수 있습니다.

ClickOnce 를 통해 웹상의 위치, UNC 공유 또는 파일 위치(예: CD)에서 클라이언트 시스템에 응용 프로그램을 배포할 수 있습니다. 웹 링크를 사용하여 응용 프로그램을 배포하는 경우 사용자는 웹 페이지의 링크를 클릭하여 응용 프로그램을 다운로드하고 클라이언트 컴퓨터에 설치합니다. 이러한 절차를 통해 필요한 시작 메뉴 바로 가기가 만들어지고 프로그램 추가/제거 대화 상자에 항목이 설정됩니다. 또한 ClickOnce 응용 프로그램이 원격으로 실행되도록 배포하여 로컬에는 아무런 설치 작업도 수행하지 않도록 할 수 있습니다. 이전 버전 Visual Studio에서처럼 표준 MSI 파일을 만들어 응용 프로그램을 설치할 수도 있습니다.

ClickOnce를 사용하여 배포하는 데 필요한 모든 기본 옵션을 허용할 수도 있지만 사용 가능한 설정은 모두 확인하는 것이 좋습니다. 그림 18에서처럼 프로젝트의 속성 대화 상자에는 게시 옵션이 있습니다. 여기서 다른 여러 옵션과 함께 사용자가 응용 프로그램을 다운로드하는 위치를 지정할 수 있습니다.

vbnet2005_preview-fig18.gif

그림 18. 프로젝트의   속성   페이지에서   게시를   선택하여   게시   설정을   구성합니다.

업데이트 단추를 클릭하면 그림 19에서처럼 대화 상자가 표시됩니다. 여기서 응용 프로그램이 업데이트를 자동으로 확인할 것인지 여부와 자동으로 확인할 경우 업데이트 수행 빈도를 구성할 수 있습니다. ClickOnce로 설치된 응용 프로그램에서는 업데이트가 효율적으로 이루어집니다. 응용 프로그램이 실행되는 동안 업데이트가 백그라운드에서 발생하도록 선택하는 경우, 설치 프로그램은 실제로 응용 프로그램 실행 도중 해당 응용 프로그램을 해제하고 새 버전으로 다시 빌드합니다. 또한 업데이트가 발생하는 간격을 지정할 수 있습니다.

vbnet2005_preview-fig19.gif

그림 19. 업데이트를   선택하여   응용   프로그램에서   업데이트를   다운로드하는   시기와   방법을   구성합니다.

ClickOnce를 사용하여 배포할 프로젝트를 만든 경우 솔루션 탐색기 창에서 해당 프로젝트를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 게시를 선택할 수 있습니다. 그림 20과 같은 대화 상자가 나타나면 사용자가 응용 프로그램을 다운로드할 수 있는 웹 사이트를 입력합니다.

vbnet2005_preview-fig20.gif

그림 20. Visual Studio 내에서   프로젝트를   게시합니다.

그러면 응용 프로그램을 온라인과 오프라인에서 모두 사용할 것인지, 아니면 온라인에서만 사용할 것인지 여부를 선택할 수 있습니다. 그림 21에서는 이러한 설정을 선택할 수 있는 페이지를 보여 줍니다.

vbnet2005_preview-fig21.gif

그림 21. 응용   프로그램을   게시하는   경우   오프라인에서   사용할   것인지   여부를   결정할     있습니다.

설정을 승인하면(그림 22 참조) Visual Studio에서 선택한 사이트에 응용 프로그램을 저장하며, 그림 23에서처럼 사이트로 이동하여 배포 버전을 테스트할 수 있습니다.

vbnet2005_preview-fig22.gif

그림 22. 마침을   클릭하여   응용   프로그램의   게시를   완료합니다.

vbnet2005_preview-fig23.gif

그림 23. 다운로드   사이트로   이동하면     페이지가   표시됩니다.

그 림 24에서처럼 설치 페이지의 배포 링크를 클릭하면 ClickOnce는 먼저 모든 사전 요구 사항이 설치되었는지 확인한 다음 설치를 확인합니다. 그런 다음 마지막으로 ClickOnce에서 응용 프로그램을 실행합니다. 또한 ClickOnce에서 시작 메뉴에 만든 바로 가기를 사용하여 응용 프로그램을 나중에 실행할 수 있습니다.

vbnet2005_preview-fig24.gif

그림 24. 사용자는   로컬   하드   드라이브에서   설치를   수행하기   전에   설치를   확인해야   합니다.

응 용 프로그램의 업데이트도 마찬가지로 간단합니다. 응용 프로그램을 변경하고 AssemblyInfo.vb 파일에서 버전 번호를 수정하면 이전과 동일한 설정을 사용하여 응용 프로그램을 다시 배포합니다. 이렇게 하면 새 버전 번호와 일치하는 웹 서버에 새 폴더가 만들어집니다. 그런 다음 사용자가 응용 프로그램을 실행하려고 하면 그림 25에서처럼 대화 상자가 나타나며, 업데이트된 버전의 응용 프로그램을 다운로드하여 실행할 수 있습니다.

vbnet2005_preview-fig25.gif

그림 25.   버전의   응용   프로그램이   출시되면   사용자는   이전   버전을   실행할     이에   대한   알림을   받게   됩니다.

ClickOnce의 기능은 이외에도 다양하지만, 무엇보다도 이 기술을 사용하면 응용 프로그램의 배포를 손쉽게 시작할 수 있는 이점이 있습니다.

COM 구성 요소를 사용하는 응용 프로그램을 배포하는 개발자는 COM 구성 요소 고유의 특성으로 인해 항상 까다로운 문제를 겪게 됩니다. 즉, 대상 시스템에서 구성 요소를 전역으로 등록해야 하는 것입니다. 이러한 전역 등록 요구 사항으로 인해 버전 관리 및 응용 프로그램 충돌 같은 부분에서 문제가 발생할 수 있으며, 이는 개발자들이 흔히 "DLL 지옥"이라고 할 만큼 기피하는 현상입니다.

.NET 구성 요소를 배포하는 작업은 항상 간단합니다. 개발자는 구성 요소와 배포된 응용 프로그램을 분리하거나, 여러 버전의 구성 요소가 나란히 공존할 수 있는 GAC(전역 어셈블리 캐시)에 공유 구성 요소를 설치할 수 있습니다. 마지막으로 Reg-Free COM이 추가되어 두 영역에서 모두 뛰어난 성능을 경험할 수 있습니다. 기존 COM 구성 요소를 계속 사용할 수 있지만 구성 요소를 대상 시스템에 등록할 필요는 없습니다.

Reg-Free COM을 테스트하려면 다음 실험을 수행해 보십시오. Visual Basic 6.0에서 VBDemo라는 간단한 ActiveX DLL을 만들고, 다음 메서드를 프로젝트 템플릿에서 만든 클래스인 Class1에 포함시킵니다.

Public Function GetPath() As String
    GetPath = App.Path
End Function

DLL을 빌드하고 아무 곳에나 저장합니다. Visual Basic 6.0에서 ActiveX DLL을 빌드하면 해당 DLL이 개발 시스템에도 등록됩니다.

Visual Studio 2005에서는 RegFreeCOMDemo라는 새 Windows 응용 프로그램 프로젝트를 만들고 기본 VBDemo DLL에 대한 COM 참조를 설정합니다. 폼에 단추를 추가한 다음 단추의 Click 이벤트 처리기를 수정하여 COM 구성 요소를 호출합니다.

Private Sub Button1_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
  Dim test As New VBDemo.Class1
  MsgBox(test.GetPath)
End Sub

Visual Basic 2005 응용 프로그램을 빌드한 다음, 응용 프로그램을 실행하고 단추를 클릭하여 COM 구성 요소가 실행되는 경로가 표시되는지 확인합니다.

RegFreeCOMDemo 프로젝트의 bin\release 폴더로 이동합니다. 이 폴더에는 주 프로젝트 실행 파일인 RegFreeCOMDemo.exe가 있습니다. 또한 구성 파일인 RegFreeCOMDemo.exe.config는 물론, 응용 프로그램이 COM 구성 요소와 통신할 수 있도록 하는 Interop 어셈블리인 Interop.VBDemo.dll도 확인할 수 있을 것입니다. 그러나 COM 구성 요소 자체인 VBDemo.dll은 없습니다.

이를 확인하려면 VBDemo.dll의 등록을 해제합니다. 시작 | 실행 메뉴에서 regsvr32 /u <path>\VBDemo.dll을 입력하고 COM 구성 요소의 전체 경로를 지정합니다. RegFreeCOMDemo.exe 응용 프로그램을 다시 실행하면 단추를 클릭할 때 예외가 발생하여 실행되지 않습니다. COM 구성 요소의 등록을 해제했기 때문에 코드에서 이를 필요할 때 찾을 수 없는 것입니다.

Reg-Free COM을 설명하려면 COM 구성 요소를 다시 등록할 수 있도록 프로젝트를 다시 빌드할 수 있어야 합니다. 시작 | 실행 메뉴에서 regsvr32를 다시 사용합니다. Visual Studio로 전환하여 프로젝트 | 모든 파일 보기 메뉴 항목을 선택합니다. 솔루션 탐색기 창에서 참조 노드를 확장하고 참조 목록에서 VBDemo를 선택합니다. 속성 창에서 Isolated 속성을 True로 설정합니다(그림 26 참조). 프로젝트를 다시 빌드하고 bin\release 폴더로 전환합니다. Reg-Free COM을 설명하려면 프로젝트를 Visual Studio 외부에서 실행해야 합니다.

vbnet2005_preview-fig26.gif

그림 26. 솔루션   탐색기의   참조   목록에서 VBDemo   선택하고 Isolated 속성을 True   설정합니다.

이 제 bin\release 폴더에서 파일을 살펴보면 VBDemo.dll 복사본이 있을 것입니다. 이 복사본은 전역으로 등록된 복사본이 아니라 응용 프로그램에 사용되는 것입니다. 여기서 VBDemo의 등록을 다시 해제합니다. 응용 프로그램을 실행하면 놀랍게도 계속해서 작동합니다. 이때 응용 프로그램에 현재 경로가 표시되는데, 이는 구성 요소가 현재 경로에서 실행되고 있기 때문입니다. Visual Studio에서 DLL을 로컬로 복사했고 Reg-Free COM이 지원되므로 응용 프로그램에서는 전역으로 등록된 복사본 대신 로컬 복사본을 사용할 수 있습니다.

Reg-Free COM을 사용하려면 단순히 COM 구성 요소를 로컬로 복사하는 것보다 확실히 많은 노력을 들여야 합니다. 출력 폴더의 파일을 살펴보면 RegFreeCOMDemo.exe.manifest가 있을 것입니다. 텍스트 편집기로 이 파일을 열면 매니페스트 파일에 COM 구성 요소에 대한 정보가 들어 있으며, Reg-Free COM은 이 파일을 통해 작동합니다. 매니페스트 파일 및 COM 구성 요소와 함께 RegFreeCOMDemo.exe를 Windows XP가 설치된 새 컴퓨터에 복사하면 응용 프로그램은 계속 실행됩니다. ClickOnce 배포 프로그램과 함께 사용하면 Reg-Free COM이 개발자의 부담을 얼마나 덜어 주는지 바로 확인할 수 있습니다. COM 구성 요소를 등록하는 과정에 많은 노력이 필요하지 않을 뿐 아니라 더 이상 DLL 지옥을 경험할 일도 없습니다.

하지만 다들 아시다시피 Reg-Free COM에는 몇 가지 제한 사항이 있습니다. Reg-Free COM을 실행하려면 Windows XP 이상을 사용해야 합니다. 응용 프로그램을 이보다 이전 버전의 Windows에 배포하려고 하면 이후 버전의 Windows를 설치해야 한다는 오류 메시지가 나타납니다. Reg-Free COM은 ActiveX 컨트롤, ActiveX DLL 및 다른 비즈니스 개체를 배포하는 데 효과적이지만 모든 구성 요소에 대해 작동하는 것은 아닙니다. 즉, 프로세스 내 구성 요소에만 해당되므로 ActiveX EXE는 제외됩니다. 또한 운영 체제의 일부인 COM 구성 요소에 대해서도 작동하지 않습니다. Reg-Free COM은 또한 규모가 큰 응용 프로그램을 필요로 하는 COM 구성 요소에 대해서도 작동하지 않습니다. 예를 들어, Microsoft Word 또는 Microsoft Excel 형식 라이브러리는 대상 시스템에 Word 또는 Excel 전체를 설치해야 하므로 이러한 형식 라이브러리를 Reg-Free COM과 함께 사용하려고 하면 작동하지 않게 됩니다. 그러나 Reg-Free COM은 응용 프로그램과 함께 배포해야 하는 COM 구성 요소의 많은 부분에 대해 작업을 단순화하는 중요한 역할을 할 수 있습니다. Reg-Free COM에 대한 자세한 내용은 Simplify App Deployment with ClickOnce and Registration-Free COM (영문)을 참조하십시오.

언어 관련 혁신 사항

성 능 및 유연성과 사용 편의성 간의 균형을 유지하려는 전통을 계승한 Visual Basic 2005는 Visual Basic과 .NET Framework를 동기화하고 비즈니스 응용 프로그램 개발을 위한 최상의 언어로 만들어 주는 새로운 기능이 다양하게 추가되었습니다. 다음 섹션에서는 Visual Basic 2005의 새로운 언어 기능 몇 가지를 간략히 소개하겠습니다.

연산자 오버로드

.NET Framework는 원래 오버로드된 연산자를 지원하지만 Visual Basic은 2005 릴리스에서 이 기능을 지원하게 되었습니다. 개발자는 이 기능을 사용하여 연산자의 기능을 특정 클래스로 오버로드하여 사용할 수 있을 뿐 아니라(이전 릴리스에는 없는 기능) +, -, *, / 등과 같은 표준 언어 연산자에 대한 기능을 오버로드할 수도 있습니다.

대개 연산자의 기능을 오버로드할 때는 다른 클래스에서 이미 지원하는 타당한 동작을 사용하게 됩니다. 다음과 같이 코드를 작성하는 것은 일반적인 방법은 아니지만 이 코드는 오버로드된 + 연산자로 인해 작동합니다.

Dim inputString as String = "Hello, "
Dim outputString As String = inputString + " World!"

+ 연산자는 일반적으로 숫자 값에 대해서만 정의되지만 String 클래스에서 두 개의 피연산자를 연결하도록 연산자의 동작을 오버로드했습니다.

Visual Basic 2005의 연산자 오버로드 기능은 소비와 선언이라는 두 가지 개별 부분으로 이루어져 있습니다. 소비의 개념은 Point 구조를 예로 들어 간단히 설명할 수 있습니다. Point 인스턴스를 가져와 Size 구조를 더하면 Size 구조에 저장된 값에 따라 Point 구조의 값이 변경됩니다. Point 클래스에는 표준 + 및 - 연산자를 사용하여 더하기 및 빼기 연산을 처리하는 코드가 포함되어 있습니다. 즉, 다음 코드는 일반적으로 예상하는 대로 실행합니다.

Dim p1 As New Point(100, 100)
Dim s1 As New Size(20, 30)
 
Dim p2 As Point = p1 + s1
Dim p3 As Point = p1 - s1

이 코드가 실행되면 예상대로 p2에는 {120, 130}이 포함되고 p3에는 {80, 70}이 포함됩니다. 컴파일러는 컴파일 시에 Point 및 Size 구조의 더하기 또는 빼기를 처리하도록 정의된 올바른 특수 함수를 찾아 더하기 및 빼기 연산자를 특수 함수에 대한 함수 호출로 변환합니다. 이전 버전의 Visual Basic에서 사용되는 다음 코드에서는 연산자 오버로드가 지원되지 않는 상태에서 Point 및 Size 값을 추가하는 방법을 보여 줍니다.

Dim p2 As point = Point.op_Addition(p1, s1)

Point 구조에 대한 코드를 만든 개발자는 op_Addition 함수뿐 아니라 op_Subtraction, op_Equality 등에 해당하는 함수도 제공해야 합니다. 이러한 함수가 없으면 코드는 컴파일되지 않습니다. 그 이유는 컴파일 시 컴파일러에서 오버로드된 연산자를 적절한 함수 호출로 변환해야 하기 때문입니다. 실제로 "p1 + s1" 같은 식은 다음과 같이 두 개의 인수를 가진 적절한 더하기 함수에 대한 함수 호출로 나타낼 수 있습니다.

Point.op_Addition(p1, s1)

더하기 함수는 프로시저에 불과하므로 컴파일러는 매개 변수에 따라 사용할 오버로드된 버전을 결정할 수 있습니다. Visual Basic 2005에서는 새로운 연산자 오버로드 기능이 추가되었기 때문에 Point 및 Size 구조에 대해 표준 수치 연산자를 사용하여 여기에 소개한 것 같은 연산을 수행할 수 있습니다. 이전 버전의 Visual Basic에서는 op_Addition 메서드 등을 명시적으로 호출하여 Point 및 Size 구조에 추가해야 했습니다.

자주 사용하는 기능은 아니지만 Visual Basic 2005에는 오버로드된 연산자를 직접 만드는 기능도 추가되었습니다. Visual Basic 컴파일러를 사용하여 다음 표와 같은 다양한 연산자를 오버로드할 수 있습니다.

+

+(단항)

-

-(단항)

*

\

/

^

&

Like

Mode

And

Or

Xor

Not

<<

>>

=(비교)

<>

<

<=

>

>=

CType

IsTrue

IsFalse

Generic

generic 의 개념과 generic을 사용하여 Visual Basic 코드의 성능, 효율 및 관리 용이성을 향상시키는 방법을 검토하기 전에 일반적인 시나리오를 살펴보겠습니다. 응용 프로그램의 일부로 클래스를 만들었으며 해당 클래스의 인스턴스가 포함된 컬렉션을 만들려 한다고 가정하겠습니다. 이 예제의 경우 다음과 같은 코드가 포함된 Customer라는 단순 클래스를 만들었습니다.

Class Customer
    Public Name As String
    Public Age As Integer
 
    Public Sub New(ByVal Name As String, ByVal Age As String)
        Me.Name = Name
        Me.Age = Age
    End Sub
End Class

Customer 개체 컬렉션이 포함된 데이터 구조를 만드는 경우 System.Collections.ArrayList 클래스를 사용하여 다음과 같이 코드를 작성할 수 있습니다.

Dim customerList As New System.Collections.ArrayList
customerList.Add(New Customer("Tom", 48))
customerList.Add(New Customer("Peter", 45))
customerList.Add(New Customer("Jerry", 73))
customerList.Add("Hello, this won't work!")
 
For Each cust As Customer In customerList
    Console.WriteLine(cust.Name)
Next

데이터에 일관성이 없음을 알 수 있습니다. ArrayList 클래스는 Customer 개체를 삽입하는 데 사용되지만 String, Integer 또는 다른 개체 형식을 넣어도 문제가 발생하지 않습니다. ArrayList 클래스의 단순함이 단점으로 작용하는 것입니다. 즉, 추가하는 데이터의 형식을 제한하기가 쉽지 않습니다. 이러한 데이터 무결성이 신경 쓰인다면 공용 ArrayList를 클래스 속성으로 노출하여 문제를 막을 수 있습니다.

System.Collections.CollectionBase 클래스에서 파생되는 컬렉션 클래스를 직접 만들면 안전한 형식의 대안을 얻을 수 있습니다. 예를 들어, 다음 클래스의 경우 컬렉션에 Customer 개체만 추가할 수 있습니다.

Class CustomerList
    Inherits CollectionBase
 
    Public Sub Add(ByVal cust As Customer)
        Me.List.Add(cust)
    End Sub
End Class

CustomerList 클래스의 경우 Customer 개체가 아닌 다른 개체는 컬렉션에 추가할 수 없습니다. 하지만 이 솔루션은 Customer 개체만 사용하는 경우에 적절할 뿐입니다. 인보이스 작성을 위해 형식이 엄격하게 지정된 컬렉션 클래스가 필요하다면 어떻게 될까요 또는 나중에 Products, Orders 등에 대한 컬렉션이 필요한 경우는 어떻게 될지 생각해 보십시오. 각 형식에 대해 개별 컬렉션 클래스를 만들어 유지한다면 유지 관리 작업에 엄청난 부담이 가중될 것입니다. 이 때문에 generic이라는 새로운 언어 기능을 사용해 볼 만한 가치가 있는 것입니다.

generic을 사용하면 저장 및 조작하는 데이터의 형식에 따라 클래스, 구문, 인터페이스 및 메서드에 매개 변수를 지정할 수 있습니다. generic이 유용한 이유는 바로 이러한 방식으로 많은 공통 클래스 및 구조에 매개 변수를 지정할 수 있기 때문입니다. 이를 generic 선언이라고 합니다. .NET Framework에서는 System.Collections.Generic 네임스페이스의 일부로 generic 컬렉션 클래스 그룹을 제공합니다.

예를 들어, System.Collections.Generic 네임스페이스에서는 generic List 클래스를 제공합니다. List 클래스를 사용하려면 다음과 같이 List의 인스턴스를 선언할 때 컬렉션 내의 항목에 대해 형식을 제공해야 합니다(여기서는 코드 파일에 System.Collections.Generic 네임스페이스에 대한 Imports 문을 추가한 것으로 가정합니다).

Dim customerList As New List(Of Customer)

이를 통해 알 수 있겠지만 "Of" 키워드를 사용하면 generic 컬렉션의 요소와 연관된 형식을 지정할 수 있습니다. generic List 클래스를 사용하려면 다음과 같이 코드를 작성합니다.

Dim customerList As New List(Of Customer)
customerList.Add(New Customer("Tom", 48))
customerList.Add(New Customer("Ken", 47))
customerList.Add(New Customer("Peter", 45))
customerList.Add(New Customer("Jerry", 73))
 
For Each cust As Customer In customerList
    Console.WriteLine(cust.Name)
Next

물론, 해당 형식 인수가 Customer 형식(또는 경우에 따라 다른 형식)인 List 클래스의 인스턴스를 만들면 Customer 개체 또는 Customer에서 파생된 클래스 개체만 저장할 수 밖에 없습니다. generic은 형식을 엄격하게 지정하므로 실수로 목록에 다른 형식을 저장하는 일은 발생하지 않습니다. 다음 코드를 예로 들어 보겠습니다.

Dim customerList As New List(Of Customer)
customerList.Add(New Customer("Tom", 48))
customerList.Add("Hello there!")
Dim c As Customer = customerList(0)

여기서 두 가지 중요한 점을 알 수 있습니다.

  • 먼저, 세 번째 줄을 제거하지 않으면 코드가 컴파일되지 않습니다. 컴파일러에서는 generic 클래스 정의를 올바르게 사용하여 만들어진 개체를 사용하고 있는지 확인합니다.

  • 또한 마지막 줄에서는 List 개체에서 반환되는 값을 캐스팅할 필요가 없습니다. List 인스턴스에 포함된 각 요소의 형식은 항상 List 클래스의 인스턴스를 선언할 때 지정된 형식으로 유지되기 때문입니다.

System.Collections.Generic 네임스페이스에서는 List 클래스 외에도 generic 버전의 Dictionary, SortedDictionary, LinkedList, QueueStack 클래스를 제공합니다. .NET Framework에는 포함된 generic 컬렉션 클래스의 수가 무척 다양하기 때문에 generic 클래스를 직접 만들어야 하는 상황은 발생하지 않을 것입니다. 하지만 generic 클래스를 직접 만들어야 한다면 Visual Basic 2005를 사용하면 됩니다.

예를 들어, 대개 벡터라고 하는 1차원 배열의 단일 데이터 형식이 포함된 클래스를 만들어야 하는 경우 다음과 같이 클래스를 만들 수 있습니다.

Public Class TypedVector(Of T)
    ' 지정된 형식의
    ' 1차원 배열을 만듭니다.
    Private arrayValue() As T
 
    Public Sub New(ByVal Size As Integer)
        ReDim arrayValue(Size - 1)
    End Sub
 
    Default Public Property Item(ByVal Index As Integer) As T
        Get
            Return arrayValue(Index)
        End Get
        Set(ByVal Value As T)
            arrayValue(Index) = Value
        End Set
    End Property
End Class(참고: 프로그래머 코멘트는 샘플 프로그램 파일에는 영문으로 제공되며 기사에는 설명을 위해 번역문으로 제공됩니다.)

다음 예제에서처럼 generic 클래스 선언인 TypedVector를 사용하면 실제 형식이 generic 클래스에서 사용되도록 지정할 수 있습니다. 이 경우, 코드에서는 Integer 형식을 클래스 이름 뒤에 "(Of Integer)" 구문이 오는 형식 인수로 지정하여 TypedVector 클래스에서 이 형식을 사용하도록 지시합니다. 이 예제에서는 5개의 정수가 포함된 배열을 만듭니다.

Dim myVector As New TypedVector(Of Integer)(4)
myVector(0) = 73
myVector(1) = 27
' 나머지 항목을 채웁니다...

Customer 개체 같은 일부 특정한 비즈니스 형식의 인스턴스만 포함할 수 있는 TypedVector 인스턴스를 만들려면 다음과 같은 코드를 사용합니다.

Dim myVector As New TypedVector(Of Customer)(11)
myVector(0) = someCustomerObject

이제 작성하는 모든 응용 프로그램에 대해 generic을 사용할 필요는 없다는 점이 확실해졌습니다. 형식이 엄격하게 지정된 컬렉션을 만들어야 하는 경우 System.Collections.Generic 네임스페이스의 기본 제공 클래스를 사용하거나 generic 컬렉션 클래스를 직접 만드는 것만큼 뛰어난 해결책은 없습니다.

IsNot 키워드

과거에는 그다지 괴로운 수준까지는 아니었지만 개체 참조가 다른 개체 참조와 다른지 여부를 확인하기 위해 다소 불편하고 어색한 구문을 사용해야 했습니다.

If Not (obj Is Nothing) Then

하지만 Visual Basic 2005에 새로 추가된 IsNot 키워드를 사용하면 앞의 예제를 다음과 같이 다시 작성할 수 있습니다.

If obj IsNot Nothing Then

때로는 사소한 부분이 큰 차이를 만들기도 합니다.

Using 키워드

.NET Framework의 많은 클래스에서는 개체에서 사용되는 리소스를 해제하기 위한 표준 메커니즘으로 Dispose 메서드를 제공합니다. 일반적으로 경험상 개체의 작업이 완료되면 사용하는 개체의 Dispose 메서드를 호출하는 것이 좋습니다. 관리되지 않는 리소스 또는 제한된 리소스와 관련된 관리되는 래퍼로 작업하는 경우에는 데이터베이스 연결 또는 Windows 글꼴이나 브러시로 작업할 때처럼 개체에서 제공하는 Dispose 메서드를 항상 명시적으로 호출하여 관리되지 않는 리소스를 해제해야 합니다. Paint 이벤트 처리기에 특정 글꼴의 텍스트와 브러시를 그리는 폼을 생각해 보십시오. 이전 버전의 Visual Basic에서는 다음과 같은 코드를 작성해야 했습니다.

Private Sub Form1_Paint( _
 ByVal sender As Object, ByVal e As PaintEventArgs) _
 Handles MyBase.Paint
 
    Dim myFont As Font
    Dim myBrush As Brush
    Try
        myFont = New Font("Verdana", 12)
        myBrush = New SolidBrush(Color.FromArgb(123, 0, 123))
        e.Graphics.DrawString( _
         "Hello, World!", myFont, myBrush, 0, 0)
 
    Finally
        If myFont IsNot Nothing Then
            myFont.Dispose()
        End If
 
        If myBrush IsNot Nothing Then
            myBrush.Dispose()
        End If
    End Try
End Sub

Visual Basic 2005에 추가된 Using 키워드를 사용하면 블록이 종료되는 방식과 관계없이 블록 종료 시 개체를 자동으로 삭제하는 코드 블록이 만들어집니다. 그러면 앞의 코드 예제는 다음과 같이 좀 더 효율적으로 다시 작성할 수 있습니다.

Private Sub Form1_Paint( _
 ByVal sender As Object, ByVal e As PaintEventArgs) _
 Handles MyBase.Paint
    ' 새 글꼴을 만듭니다.
    Using myFont As New Font("Verdana", 12)
        ' 새 단색 브러시를 만듭니다.
        Using myBrush As New SolidBrush( _
         Color.FromArgb(123, 0, 123))
            e.Graphics.DrawString( _
             "Hello, World!", myFont, myBrush, 0, 0)
        End Using
    End Using
End Sub

부호 없는 정수 형식

Visual Basic은 지금까지 부호 없는 바이트와 부호 있는 정수 형식을 지원해 왔지만 부호 있는 바이트나 부호 없는 정수는 지원하지 않았습니다. Visual Basic .NET 2002 및 2003에서는 개발자가 .NET Framework의 부호 없는 형식을 만들어 사용할 수 있지만 이러한 값에 대해 수치 연산을 수행할 수는 없었습니다. 하지만 Visual Basic 2005에서는 이러한 형식은 물론 필요한 해당 변환 메서드까지 완벽하게 지원합니다. 다음 표에는 네 가지 새로운 내부 형식이 나와 있습니다(Byte에 형식 문자가 없으므로 SByte에도 형식 문자가 없음).

VB 키워드

변환 연산자

형식 문자

범위

CLR 이름

SByte(1바이트)

CSByte(o)

(없음)

-128 - 127

System.SByte

UShort(2바이트)

CUShort(o)

US

0 - 65,535

System.UInt16

UInteger(4바이트)

CUInt(o)

UI

0 - 4,294,967,295

System.UInt32

ULong(8바이트)

CULng(o)

UL

0 - 18,446,744,073,709,551,615(1.8...E+19)

System.UInt64

부분 클래스

부 분 클래스를 사용하면 단일 클래스를 여러 파일에 나눌 수 있습니다. 언뜻 일상적인 개발 업무에 전혀 영향을 주지 않는 기능처럼 보이지만 사실은 응용 프로그램을 작성할 때마다 요긴한 역할을 하는 기능입니다. 이 기능의 가장 유용한 측면은 사용자가 작성한 코드와는 다른 파일에 코드를 저장하되, 동일한 클래스에서 기능을 제공하는 Visual Studio와 같은 코드 생성기에서 찾을 수 있습니다. 이러한 방식을 통해 비주얼 디자이너는 사용자가 작성한 코드에 영향을 주지 않고 훨씬 쉽게 코드를 구문 분석하고 다시 생성할 수 있습니다.

기본 클래스는 일반 클래스처럼 만들어지지만 클래스에 포함된 추가 부분은 Partial 키워드를 사용하여 선언됩니다. 예를 들어, 다음과 같은 코드가 있다고 가정하겠습니다.

Public Class Form1
  Inherits Windows.Forms.Form
  ' 사용자 코드
End Class
Partial Public Class Form1
  ' 디자이너 코드
  Sub InitializeComponent()
    ' 여기에 컨트롤에 대한 정보가 들어갑니다...
  End Sub
End Class

단일 클래스를 여러 부분 클래스로 나눌 수 있는 것은 물론 동일한 네임스페이스에 있는 동일한 이름의 모든 부분 클래스는 컴파일 시 단일 엔터티로 컴파일됩니다. 이 기능은 도구가 사용하는 코드는 업데이트하면서 사용자의 코드는 그대로 유지하는 방식으로 Visual Studio에서 사용자의 코드를 효과적으로 관리할 수 있게 해 주는 이점이 있습니다. 이는 여러 명의 개발자가 프로젝트를 진행할 때 고려할 만한 기능입니다. 클래스를 여러 파일에 분할하면 동일한 클래스를 동시에 수정하므로 소스 제어를 관리하기가 훨씬 쉬워집니다.

BackgroundWorker 개체

많 은 Visual Basic 개발자들은 항상 비동기 처리를 다루는 문제를 어렵게 느끼고 있습니다. 또한 이전 버전에서는 콜백 프로시저가 올바른 스레드에서 실행되고 있는지 확인하는 데 많은 어려움이 있었습니다. 그러나 Visual Basic 2005 개발자는 BackgroundWorker 구성 요소를 사용하여 이러한 작업을 자동으로 처리할 수 있습니다. 개발자는 이 구성 요소를 디자인 화면으로 끌어서 실행 속도가 느린 프로세스를 백그라운드 작업으로 간단히 실행할 수 있습니다.

개발자는 BackgroundWorker 구성 요소의 RunWorkerAsync 메서드를 호출하여 해당 구성 요소의 DoWork 이벤트 처리기에서 코드를 실행할 수 있습니다. 이 코드는 주 사용자 인터페이스 스레드와는 별도의 스레드에서 실행되므로 주 스레드를 차단하지 않고 실행 속도가 느린 프로세스를 실행하는 동안 사용자 인터페이스가 계속 작동하도록 할 수 있습니다. 백그라운드 작업이 완료되면 BackgroundWorker 구성 요소는 RunWorkerComplete 이벤트를 발생시켜 호출자가 작업이 완료된 사실에 반응할 수 있도록 합니다. 또한 RunWorkerComplete 이벤트 처리기는 주 스레드에서 실행되므로 구성 요소가 포함된 폼에서 컨트롤을 업데이트할 수 있습니다.

비 동기 처리가 너무 어렵게 느껴지거나 멀티 스레드 사용자 인터페이스의 여러 복잡한 문제와 씨름하는 경우라면 BackgroundWorker 구성 요소가 해결책이 될 수 있습니다. 이 강력하고 새로운 구성 요소를 사용하면 폼의 스레드 안전성에 대해 염려할 필요가 없을 뿐 아니라 응용 프로그램에 백그라운드 처리를 손쉽게 추가할 수 있습니다.

요약

여 기서 소개한 몇 가지 추가 기능을 통해 알 수 있듯이, Visual Basic 2005는 응용 프로그램을 신속하게 만들기 위한 최상의 환경과 언어를 제공한다는 목표를 바탕으로 Visual Basic .NET 2003의 뛰어난 기능을 계속해서 발전시켜 나가고 있습니다. 새로운 언어 기능, IDE 기능 및 생산성 도구가 추가된 Visual Basic 2005에서는 .NET Framework에서 제공하는 모든 언어 기능을 사용하여 작업의 생산성을 한층 끌어올릴 수 있습니다.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft