Who are you?


이동범(Dongbum Lee)


Microsoft Regional Director


Microsoft MVP - VB.net


MHVB.net 시삽

Wanna talk with me?

Here I am

Subscription

MSN 메신저를 통해 글이 갱신되면 알려드립니다.

Windows Live Alerts

Search

Navigation

Categories

.net (14) Ajax (1) asp.net (2) AxWebBrowser (1) blog (3) browser (1) das blog (1) dasBlog (2) DataGridView (1) Google (1) ie (1) iis (1) javascript (1) jQuery (1) Microsoft (14) Office (2) OOXML (1) Silverlight (1) Team System (2) UX (1) VB (3) vb.net (4) Vista (1) visual studio (5) visual studio 2010 (1) windows7 (1) Winform (3) WinFX (1) WPF (2) 독점 (1) 성산포 (1) 음악 (1) 일상 (8) 조용필 (1)

On this page

Archive

Blogroll

Notice

알림
본 블로그는 저의 개인적인 의견을 담고 있습니다.
제가 몸담고 있는 조직의 공식적인 의견과는 다를 수 있습니다.

RSS 2.0 | Atom 1.0 | CDF Send mail to the author(s) E-mail

BlogStats

Total Posts: 41
This Year: 0
This Month: 0
This Week: 0
Comments: 9

Sign In

# Thursday, September 25, 2008
Thursday, September 25, 2008 3:55:31 PM (Korea Standard Time, UTC+09:00) ( .net | Microsoft | VB | vb.net | visual studio )

Visual Studio 2008과 .NET Framework 3.5와 함께 새롭게 릴리즈 된 Visual Basic .NET – VB9은 기존의 VB6 개발자들이 요구하는 높은 융통성과 생산성을 제공해 주고 있습니다. . NET Framework의 도래와 함께 기존의 VB개발자들이 느끼고 있는 혼동과 방황을 잠재워 줄 수 있는 VB만의 Dynamic한 특징들을 Visual Studio 2008의 통합 개발 환경과 새로워 진 언어적 특징 등을 통해 알아보도록 하겠습니다.

.NET Framework 가 소개되면서 기존 VB6를 사용하던 때에 비해 VB 개발자들의 수적인 감소가 눈에 띄게 나타나고 있는 현실입니다. VB언어가 가지고 있는 생산성이라는 강점에도 불구하고 아직도 기존의 VB 와 ASP 개발자들은 여전히 .NET의 환경에 대하여 많은 혼란을 느끼고 있습니다.

그 주된 요인은 엄격한 구문과 타입체킹, 그리고 본격적인 객체지향이라고 하는 그 동안 그다지 심각하게 생각하지 않고도 자신이 원하는 응용 프로그램들을 개발해 왔던 기존의 융통성 높은(비 구조적이거나 프로시저 중심적이거나 하는 것은 전혀 문제되지 않는!) 개발 방식과 경험들이 이제는 더 이상 통용되지 않는다는 것이 원인 중에 하나라고 생각합니다. 그도 그럴 것이 VB개발자들은 다른 개발자들과 달리 그 구성에 있어 전문적인 프로그래밍 교육과 경험을 가지지 못한 파워 유저의 비중이 크며(절대 다수의 이야기가 아닙니다), 이들에게 있어 객체지향 프로그래밍과 구조적인 프로그래밍에 대한 요구는. NET을 넘기 힘든 벽으로 여기게 되었습니다. 또한 다른 요인으로 볼 수 있는 것 은 기존 C++ 개발자들에 비해 언어적으로 열세라는 심리적인 열등감에 사로잡혀 있었던 VB개발자들이 느끼는 세미콜론(;)에 대한 막연한 동경심(?)이 요인이 될 수 있었을 것입니다.

이 글을 통하여 .NET으로 넘어오지 못한 기존 VB개발자들과 타 언어로 개종(?)을 결행한 옛 VB개발자들에게 VB.NET이 가진 프로그래밍적인 매력과 Visual Studio 2008을 통한 높은 생산성을 일깨워 주었으면 합니다. 그리고 이를 통해 많은 개발자들이 다시금 VB전성시대를 이끌어 갈 수 있는 기회를 만들게 되기를 바랍니다.

통합 개발 환경에서의 장점들

통합 개발 환경에서 VB2008의 향상

Visual Studio 2008은 클래스 파일의 로딩에서 컴파일에 이르기까지 대부분의 성능들이 최소 50% 이상 향상되었으며 VB개발자들에게 기존 개발 시에 비해 좀 더 시원한 체감속도를 제공해 줍니다. 아래는 Microsoft VB.net 개발팀이 제공한 VB2005 대비 VB2008 성능 향상 비교 자료입니다.

(http://blogs.msdn.com/vbteam/archive/2008/01/04/vb2008-outperforms-vb2005-lisa-feigenbaum.aspx)

Scenario

VB2005 대비 성능 향상 비율

대형 프로젝트 빌드 (using background compilation)

0.61%

다중 프로젝트 솔루션 빌드 (explicit build operation)

3.56%

다중 프로젝트 솔루션 빌드 (using background compilation)

8.91%

클래스에 맴버를 추가한 후의 응답성

11.16%

프로젝트를 오픈한 후의 응답성

15.17%

타입에 대한 하위 목록들에 대한 인텔리센스 호출(최초)

44.49%

Xml 커맨트가 달린 솔루션 내에서 Edit-and-Continue (최초)

47.71%

메소드 선언을 변경 한 후의 응답성

60.57%

10 Steps in the debugger (subsequent times)

63.06%

타입에 대한 하위 목록들에 대한 인텔리센스 호출 (subsequent times)

64.98%

솔루션이 이미 빌드 되었을 때 F5(실행) (subsequent times)

72.35%

오류 생성 후 오류 목록에 추가되는 항목 속도

74.26%

10 Steps in the debugger (first time)

86.05%

솔루션에 대한 background 컴파일 중의 응답성

89.21%

대형 솔루션에 대한 로딩 (subsequent times)

90.78%

대형 솔루션에 대한 로딩 (first time)
(Note: 본 수치는 XP에서의 향상이며, Vista에서는 본 XP 테스트 시나리오의 2배의 향상을 보였음

91.36%

[표1 – VB2005 대비 VB2008의 IDE 성능 향상 수치]

인텔리센스(Intellisense) 의 생산성

인텔리센스가 없는 VB를 생각해 볼 수 있을까요? VB가 개발생산성을 가질 수 있는 가장 큰 이유가 바로 인텔리센스에 있다고 생각합니다. 혹자들은 인텔리센스가 개발자들을 바보로 만들고 개발자들의 실력을 떨어뜨린다는 이해할 수 없는 주장을 펼치기도 하지만, 그럼에도 불구하고 텍스트 에디터에 Copy & Past 와 현란한 단축키로 날 코딩을 하는 천재(?)개발자들 보다는 바보(?) 개발자들이 쏟아내는 코드의 생산성이 월등하다는 것이 누구나 아는 사실입니다.

VB9에서는 개발자들의 생산성을 높이기 위한 인텔리센스 기능이 기존의 Visual Studio 2005에 비해 월등히 강력해 졌습니다. 이러한 기능을 인텔리센스 에브리웨어(Intellisence Everywhere)라고 합니다.

간단히 Visual Studio 2008에서 MyIntegerValue라고 하는 Integer 타입의 Private 변수를 선언해 보도록 하겠습니다.

그림1

[그림1 : Private 변수 선언 시 P 를 타이핑 한 경우]

그림2

[그림2: Private 변수 선언 시 Pr 을 타이핑 한 경우]

원래 당연한 듯 보이는 인텔리센스 기능도 Visual Studio 2005에서 위의 과정을 수행하면 사용자의 타이핑에 위와 같이 자동으로 반응하는 인텔리센스 기능은 제공하지 않았습니다. 이 기능 하나만으로도 개발자는 코딩 생산성을 높일 수 있습니다. 게다가 변수를 참조하는 경우에 있어서도 VB개발팀들은 기존의 단순 변수 나열에서 필터링 인텔리센스 기능을 제공함으로써 개발자들이 빠른 코드 작성을 가능케 해 줍니다.

이번에는 앞서 선언한 변수에 값을 지정하기 위해 myIntegerValue 를 타이핑 해 보도록 하겠습니다.

그림3

[그림 3: myIntegerValue에 값을 지정하기 위해 타이핑 하는 경우의 인텔리센스 필터]

자동으로 개발자가 키를 입력함에 따라 자동으로 원하는 변수들이 필터링 되어 보여짐을 알 수 있습니다. 독자들의 이해를 돕기 위해 아래에 Visual Studio 2005에서 동일한 작업 시에 제공되던 인텔리센스 화면을 함께 실어 보았습니다.

그림4

[그림 4: Visual Studio 2005에서 동일한 작업을 하는 경우 인텔리센스 – 모든 키워드가 나열되어 보여진다]

상당히 친절해 진 VB 코드 개발환경이 몸으로 느껴질 수 있을 것입니다. 한가지 팁을 더 소개한다면, 인텔리센스 창이 보이는 상태에서 Ctrl(컨트롤)키를 누르고 있으면 해당 창이 투명하게 변해 코드를 가리지 않게 할 수도 있습니다.

코드조각(Code Snippet)을 통한 코딩생산성 향상 및 코드 재활용

코드조각(Code Snippet) 추가하기 기능은 VB에서만 제공하는 기능은 아니지만, 이를 활용하는 방식에 있어서는 C#에 비해 상당히 사용하기 쉬운 구조로 이루어져 있습니다. 개발하려는 코드에 대한 정확한 사용 방법을 알 수 없다면, 코드 창에서 ‘?’(물음표)를 입력 한 후 Tab(탭)키를 입력해 봅니다.

그림5

[그림 5: Visual Studio 2008 코딩 창에서 코드 조각 추가하기 메뉴 - ?(물음표)를 입력 후 Tab(탭) 키를 누른 경우]

각 시나리오 별 예제 코드들이 제공됨으로써 자신의 상황에 맞는 예제 코드들을 쉽게 재 활용할 수 있으며, 개발자가 자신의 입맛에 맞도록 코드들을 수정 및 추가할 수 있는 기능을 제공합니다.

제가 자주 사용하는 코드 조각 추가기능은 프로퍼티 자동생성 기능입니다.

코딩 창에서 Property 라고 입력한 뒤 Tab(탭)키를 치면 아래 [그림 6]과 같이 기본적인 프로퍼티를 생성하기 위한 코드가 자동으로 추가됩니다. 프로퍼티의 타입과 프로퍼티명 만 변경해 주면 자동으로 프로퍼티가 만들어집니다.

그림6

[그림6 : 코드 조각 추가 기능을 이용하여 프로퍼티 구문이 자동으로 추가된 예]

마치 자동완성 기능의 일부로 보여지지만, 본 기능은 코드 조각 관리자에 의해 등록된 코드 조각 템플릿들 중 프로퍼티 코드조각에 부여된 단축키(단축단어)에 의해 호출되어 추가된 코드입니다.

이와 같이 유용한 단축단어들을 사전에 알고 있다면 코딩의 생산성이 보다 높아지게 되는 것은 당연한 일입니다.

예를 들어 코딩창에 qConsole + Tab(탭) 키를 치면 LINQ 구문을 활용하여 Process 목록을 콘솔창에 나열해 주는 코드가 자동으로 생성될 것입니다.

객체의 타입이 먼저 선언되고 뒤이어 변수명이 선언되는 C 계열의 언어의 경우 심리적으로 개발자는 자신이 선언할 객체에 대하여 정확한 타입명을 암기(?)하고 있어야 하지만 변수명 선언에 이어 객체의 타입이 선언되는 VB의 경우에는 개발 도구에서 제공해 주는 인텔리센스 기능으로 인해 정확한 타입명을 암기하지 않아도 어렴풋한 기억만으로 코딩을 시작할 수 있습니다.

여담이지만 LINQ 구문에서 From 절이 SQL 구문에서와는 달리 Select절 보다 앞에 오게 된 이유도 바로 코딩상의 인텔리센스를 지원하기 위한 선택 이었다고 합니다.

그림7

[그림 7. 변수 객체 타입의 자동완성 – Str 뭐였더라?.... ]

지금까지 통합 개발 환경에서 VB.net 이 가진 생산성 측면에서의 타 언어들과 견주어 비교될 만한 특징들을 살펴 보았습니다. 전투에 있어 병사 개개인의 전투 능력은 필수적이지만 이 병사들의 개인화기가 어떠한 것 이냐에 따라 그 전투의 승패는 크게 다를 수 있을 것입니다.

앞서 텍스트 에디터를 사용하는 천재(?) 개발자들을 언급했지만, VB를 타 언어보다 사랑하게 된 가장 큰 이유는 바로 이러한 도구에서 제공해 주고 있는 바보(?)도 쉽게 개발할 수 있는 편의성과 생산성입니다.

이제는 관심의 초점을 VB9의 새롭고 강력해 진 언어적인 특징에 초점을 맞춰 보도록 합니다.

VB9의 언어적 향상

이 글의 제목에 Dynamic이라는 단어를 사용하였습니다. 일찍이 VB만큼 Dynamic- 동적 -이라는 단어가 잘 어울리는 프로그래밍 언어는 없었습니다. Late Binding의 강력한 기능은 오히려 그 넓은 융통성 탓에 강력한 타입기반의 프로그래밍 방법에 익숙한 C 계열 개발자들에게 비난이 되기도 하였지만, 또 다시 추세는 느슨한 타입기반의 언어들인 루비, 파이선, 자바스크립트, VB들에 관심이 쏠리고 있습니다.

또한 .NET 기반의 언어인 C#, VB.net 에 있어서도 LINQ(Language Integrated Query)의 출시와 함께 Late Binding의 언어적 특징인 타입 유추(Type Infer) 기능을 제공해 줌으로 이러한 특징들이 나타나기 시작했습니다.

VB.net 에서는 이제 예전의 방식과 같이

Dim aVar = “Viva VB!!”

와 같은 코드작성이 가능해 집니다. 이와 같은 코딩은 컴파일러에 의해 자동으로 String 타입으로 변환되어 컴파일 됩니다. 하지만 변수 선언에 항상 객체의 타입이 선언되어야 하는 C#의 경우에는 JavaScript에서의 변수 선언자인 var 를 차용해 올 수 밖에 없었습니다.

var aVar = “Are you C#?”

어딘가 어색하게 보이는 문장입니다. 어쩐지 맞지 않은 옷을 입고 있는 C#의 모습이 아닐까요? J

VB개발자들에게 있어서는 당연한 것으로 받아들여질 수 있으나, 이러한 .NET 기반 언어들의 변화는 프로그래밍 관점에 있어서의 많은 변화가 함께 수반될 수 밖에 없습니다.

또 하나 고무적인 사실은 차세대 웹 개발 플랫폼이라 일컬어지는 Silverlight 1.1 버전에서(이후 2.0으로 재 Vesioning됨) DLR(Dynamic Language Runtime)을 지원하는 언어로써 루비, 아이언 파이선, 자바스크립트, 그리고 VB를 선정하였다고 합니다. 위의 언어들이 가지는 공통적인 특징이 바로 Dynamic 이라고 하는 점을 생각해 보면 이는 당연한 결과입니다.

마이크로소프트의 .NET Framework 기반 언어로써 First Citizen이라 일컬어지는 언어들 중 유일하게 윈도우 플랫폼 기반의 어플리케이션과 Cross browser에서 실행 가능한 RIA(Rich Internet Application) 개발을 가능케 하는 언어는 VB가 유일한 것이 될 것입니다.

Born in XML!
그림8
[코드 1 – XML Text가 변수로 선언된 예]

왠지 기존 코드와 비교해 보자면 어색합니다. 위의 코드가 컴파일 될 수 있을까요?

VB9에서는 아주 자연스러운 코드가 됩니다.

별도의 Line 연결자인 _ (언더바) 문자 없이도 변수 선언과 함께 작성되는 XML 텍스트는 그 자체로 XElement 타입의 객체로 선언됩니다. (XML Header를 추가해 준다면 자동으로 XDocument 타입이 됩니다) 이제 VB에서는 XML 텍스트 자체는 하나의 XML 요소 객체로 인식될 수 있게 됩니다.

아래는 C#을 통한 코드 1의 XML XElement를 선언하기 위한 코드입니다.

얼핏 보기에도 아래의 코드는 직관적이지 못합니다.

그림9

[코드 2 – 코드1의 XML 텍스트를 만들기 위한 코드. 한눈에 봐도 어떤 구조인지가 눈에 들어오지 않음]

VB에서는 단순 XML 텍스트 선언뿐만 아니라 동적인 XML Element 들을 생성해 낼 수도 있습니다. 아래의 코드를 통해 보다 자세히 살펴봅니다.

그림10

[코드 3 – Process 목록들을 XML로 표시하기]

ASP에 익숙한 개발자라면 아주 친숙한 Data Placeholde(<%= %>)를 확인 할 수 있습니다. 바로 위와 같이 Data가 표기되어야 할 Data Island 부분에 <%= %> 코드를 통해 원하는 데이터를 추가해 넣을 수 있습니다. 뿐만 아니라 코드의 가독성이 상당히 뛰어 나기 때문에 XML을 생성하는 코드를 작성하는 데 있어 그 어떠한 언어도 가질 수 없는 장점을 가집니다.

기존의 XML에서 XML로의 변환을 위해 사용되었던 XSLT 변환 작업들이 이러한 VB의 Dynamic한 언어적 특징으로 인해 손쉽게 처리될 수 있는 방법이 생겼습니다.

XML 데이터의 생성뿐만 아니라 파싱에 있어서도 그 직관적이고 손쉬운 코딩은 빛을 발하고 있습니다. 아래의 코딩은 Microsoft 사의 MSDN 사이트의 RSS XML을 파싱하여 콘솔에 디스플레이 해 주는 코드입니다.

그림11

[코드 4 – RSS XML 파싱하기]

XML 파싱에 있어서도 언어와 XML 텍스트를 직관적으로 혼용하여 사용하고 있음을 확인할 수 있습니다.

위의 코딩 역시 C#으로 변환하면 아래와 같습니다. 모든 XML Element 들에 대한 파싱 방식이 메소드 기반으로 되어 있어 VB에 비하여 직관성이 많이 떨어짐을 알 수 있습니다.

그림12

[코드 5 – C# 으로 RSS XML 파싱하기]

VB를 통한 XML 파싱은 메소드 기반의 API 호출이 아닌 기본적으로 XPath 쿼리 문장에서 사용하던 모든 XML 표기법들을 그대로 활용할 수 있기 때문에 코드의 가독성과 직관성 및 XML 처리에 있어서의 생산성은 더욱 뛰어나게 됩니다.

Upgrade를 지원하는 유일한 언어!

VB6 코드를 VB.net으로 변환할 수 있는 방법은 매우 다양합니다. VB.net으로 코드를 변환해 주는 코드 변환기가 기본적으로 Visual Studio에서 제공되고 있으며, 기존 VB6 코드와 VB.net 코드를 함께 사용할 수 있게 해주는 Interoperability Toolkit을 VB.net 홈페이지를 통해 제공해 줍니다. 또한 COM객체를 그대로 이용할 수 있는 .NET의 장점으로 인해 코드의 변환 없이도 .NET에서의 코드 활용이 가능할 수도 있습니다.

무엇보다 Microsoft 사의 관리형 언어들 중 유일하게 VB만은 기존 개발자들의 기존 코드들을 위한 다양한 Upgrade 방법들을 제공해 주고 있습니다.

이미 개발된 VB코드들에 대한 부담이 큰 개발자들도 일단 한번 해당 프로젝트를 Visual Studio 2008에서 실행하여 업그레이드 마법사를 통해 변환되는 코드를 살펴보기 바랍니다. 개발자들의 코딩패턴에 따라 달라지겠지만 약 80% 정도의 코드들은 별도의 변환 없이 사용이 가능한 수준의 코드로 변환해 줍니다.

Why VB?

이 밖에도 많은 기능들이 Visual Studio 2008에서 VB에 추가되었습니다. 여기서 이 많은 기능들을 다 담아낼 수 없는 아쉬움은 있지만 앞서 살펴본 VB만이 가지는 생산성 높고 강력한 기능들 만을 보더라도 충분히 VB가 이전에 비해 얼마나 많이 달라졌는지를 느낄 수 있었을 것이라 생각합니다. 저 역시 VB6 이후 버전에 있어서 VB 개발팀들이 VB만의 Dynamic한 융통성을 제공해 주지 못하고 C#과의 문법적 차이 이외의 두드러진 장점을 제공해 주지 못했던 기존 버전에 대한 아쉬움이 적지 않았지만 이제는 ‘왜 VB냐?’는 질문에 대한 해답을 명쾌하게 해 줄 수 있게 된 것 같습니다. 차기 버전으로 새롭게 기획되고 있는 VBx(VB10)는 지금의 Dynamic한 VB의 장점들을 보다 향상시켜 DLR(Dynamic Language Runtime) 을 아우르는 강력한 언어로 탈바꿈 할 것으로 전해지고 있습니다.

보다 VB스럽고, 보다 Dynamic해진 VB9.

Visual Studio 2008을 통해 코딩을 하고 있노라면 타격감 좋은 온라인 게임을 즐길 때의 짜릿함이 느껴집니다. 여러분들도 다음의 링크에서 평가판(http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx) 을 다운로드 하고 새로워진 VB.net을 느껴보시기 바랍니다. 왜 VB인지 말입니다.

Comments [2] | Trackback | # 
Related posts:
Visual Studio 2010 to come with ‘Black Box’
새로운 마이크로소프트의 UI 시도
Speed test: Google Chrome beats Firefox, IE, Safari
UI의 생산성을 높여주는 획기적인 아이디어! - NukeationMachine
OOXML is approved
Source code of Visual Basic runtime has been released to public

Referred by:
http://blogs.msdn.com/vbteam/archive/2008/01/04/vb2008-outpe... [Referral]
비베로 게임 만들기 (www.google.co.kr) [Referral]
visual studio 2008 코드 조각 관리자 (www.google.co.kr) [Referral]
http://www.mhvb.net/ [Referral]
코드 조각 관리자 추가 (blogsearch.google.co.kr) [Referral]
codesnippet 단축키 (www.google.co.kr) [Referral]
http://www.maaalisa.com/wadai/page/28318blog1.html [Referral]
c# rss 파싱 (www.google.co.kr) [Referral]
2008에서 VB 컴파일 (www.google.com) [Referral]
visual (search.live.com) [Referral]
vb6 프로그래밍 (blogsearch.google.co.kr) [Referral]
vb net (kr.search.yahoo.com) [Referral]
vb6 코드를 vb.net으로 변환 (www.google.co.kr) [Referral]
xml vb (www.google.co.kr) [Referral]
vb2005 변수 (kr.search.yahoo.com) [Referral]
비스타 VB 실행 (www.google.co.kr) [Referral]
vb xml 파싱 (www.google.co.kr) [Referral]
VB String 객체명 (www.google.com) [Referral]
vb10 dlr (www.google.co.kr) [Referral]
vbx dlr (www.google.co.kr) [Referral]
VB���� XML �Ľ� (search.daum.net) [Referral]
vb xml 파싱 (www.google.co.kr) [Referral]
silverlight visual studio 2005 (www.google.co.kr) [Referral]
vb xml 생성 (www.google.co.kr) [Referral]
vb9 (blogsearch.google.co.kr) [Referral]
vb.net xml 파싱 (www.google.co.kr) [Referral]
VB를 VB.Net으로 변환 (search.live.com) [Referral]
비베 (blogsearch.google.com) [Referral]
자동프로퍼티 탭 (www.google.co.kr) [Referral]
VB 6 XML google (www.google.co.kr) [Referral]
VB Line (www.google.co.kr) [Referral]
c# 항목이 이미 추가되었습니다 (www.google.co.kr) [Referral]
visual basic continue (www.google.co.kr) [Referral]
Monday, September 29, 2008 9:54:07 AM (Korea Standard Time, UTC+09:00)
솔직히... VB 의 XML 기능은 너무 부럽습니다. ^^
Monday, September 29, 2008 11:34:04 AM (Korea Standard Time, UTC+09:00)
이제 시작일 뿐이죠 :)
VBx를 기대해 보세요!!!
Comments are closed.