VB.NET 2008/VB - 문법

What is .NET Framework? (닷넷이란 무엇인가?)

본클라쓰 2010. 11. 4. 10:56

 

2000년 6월 마이크로소프트는 닷넷(.NET)이라는 개발 환경을 발표했다. 닷넷의 기본 개념은 한번 만들어진 프로그램이 별도의 수정없이 다른 운영체제나 다른 플랫폼에서도 실행될 수 있도록 하는 것이다.

 

플랫폼 독립적인 응용 프로그램을 만들려는 시도는 이미 존재했다. 1995년에 발표된 자바는 이미 어느 정도 성공을 거두고 폭넓게 사용되고 있다. 마이크로소프트도 자바 개발툴을 발표하였지만 라이센스 문제와 자유로운 기능 확장을 위해 닷넷을 만들게 되었다. 이 때문에 자바와 닷넷은 직접적인 경쟁 관계라 할 수 있다.

 

한번 만들어진 프로그램을 모든 플랫폼에서 사용한다는 것은 매우 매력적이지만 이와 같은 방식은 중간 코드를 통해 실행되기 때문에 성능 저하가 따를 수 밖에 없다. 중간 코드는 특정 플랫폼 전용의 네이티브 코드로 컴파일된 프로그램보다 이론상이나 실제로 느리다. 그럼에도 닷넷이나 자바가 나온 까닭은 소프트웨어의 느린 속도를 뒷받침할 수 있는 하드웨어 환경의 지속적인 개선이 있었기 때문이다. 하드웨어보다 인건비가 훨씬 더 비싸기 때문에 성능보다는 개발 기간 단축과 유지 보수의 편의성이 더 중요해졌기 때문이다.

 

닷넷의 또 다른 중요한 등장 배경은 웹의 대중화이다. 세계의 모든 컴퓨터들이 인터넷으로 연결되어 있으며 소프트웨어는 혼자서 독립적으로 실행되는 것이 아니라 분산 환경에서 상호 유기적으로 협조하며 동작한다. 이런 분산 환경을 위해서는 서로 다른 하드웨어 환경과 운영체제에서 실행될 수 있는 플랫폼 독립성이 필수적인 요건이다. 닷넷은 인터넷의 표준 문서 포멧인 XML과 HTTP를 통한 SOAP 프로토콜을 기본적으로 지원하며 네트워크상의 소프트웨어끼리 자유롭게 정보를 교환할 수 있도록 한다.

 

.NET 플랫폼이 제공하는 대부분의 제품군은 자바의 제품군과 비슷하게 구성되어 있다. 따라서 자바를 이해한다면 닷넷을 좀 더 쉽게 이해할 수 있다.

 

 

● 자바와 닷넷의 비교

 

자바는 객체지향 프로그래밍 언어로 JFC(Java Foundation Class)라는 광범위한 기능을 가진 라이브러리를 제공하는 언어이다. 자바는 플랫폼에 독립적이다. 플랫폼 독립성은 원도우나 리눅스와 같은 다른 운영체제에서 같은 코드가 동일하게 동작할 수 있다는 뜻이다. 이렇게 플랫폼에 독립적인 동작을 수행하는 핵심은 자바 가상 머신이다. 자바로 작성된 코드는 각 운영체제에 설치되어 있는 가상 머신을 통해 동작하기 때문에 한번 작성해 놓은 자바 프로그램은 어떤 플랫폼에서도 실행이 가능하다.

 

닷넷은 어떠한가?

 

닷넷도 자바의 개념을 그대로 가지고 있고, 닷넷 만의 특징을 추가한 것이다. 아래 그림은 닷넷의 플랫폼 구성도이다.

 

닷넷의 최상위 계층은 CLR(Common Language Runtime)이라는 공통 언어로 구성되어 있다. 공통 언어란 개념은 다양한 언어를 사용하여 동일한 동작을 하는 프로그램을 작성할 수 있다는 뜻이다. 윈도우 플랫폼 개발 환경에서 사용할 수 있는 언어는 C, C++, C#, VB 등 다양한 언어가 있다. 이 언어들이 CLR로 닷넷에서는 언어 간의 통합이 이루어진다. 개별 언어로 작성된 프로그램 코드는 CLS(Common Languag Specification)을 사용해 MSIL 코드로 변경된 후 CLR을 통해 프로그램이 실행된다. 즉, 개별 언어 C, C++, C#, VB 등으로 작성된 코드는 컴파일 과정에서 공통 언어로 번역되고, 공통 언어의 결과물을 가상 머신에서 실행시키는 구조이다. 즉, 언어는 다르지만 결과물은 하나인 구조이다.

 

자바는 한가지 언어만 지원하지만 닷넷은 여러 언어를 사용해 같은 프로그램을 제작하는 것이 가능해진 것이다.

 

또한 닷넷의 클래스 라이브러리는 단순히 구조화된 API를 제공한다는 점 이외에 다양한 장점들을 제공한다. CLR과 FCL(Foundation Class Library)를 사용할 경우 잘 조작된 객체지향 프로그래밍 모델을 사용해 프로그램을 만들 수 있다. 이는 익숙한 자바를 사용하던 것과 비슷한 방법으로 쉽게 윈도우 플랫폼을 위한 프로그램을 개발할 수 있다는 것을 의미한다.

 

기존 윈도우 프로그램은 C언어 기반의 API를 통해 dll 파일을 사용하거나 COM 객체를 사용해야 했기 때문에 간단한 기능을 구현하는데도 많은 노력이 필요했지만 닷넷은 클래스 라이브러리를 사용하기 때문에 이런 노력을 많이 감소된다. 또한 윈도우 프로그램을 만들다 보면 여러 응용 프로그램이 같이 사용하는 dll 들이 충돌을 일으키는 문제를 자주 접하게 된다. 이런 문제를 흔히 'dll Hell'이라고 부르는데, 자바에서는 이런 문제가 발생되지 않지만 Win32 프로그램을 개발하는 사람은 한번씩 이런 문제를 겪어 보게 된다. dll 이 처음 만들어졌을 때는 자주 사용하는 라이브러리를 dll 파일로 만들어 여러 프로그램이 공유하도록 하게 하여 모자란 디스크의 공간을 아끼기 위함이였다. 그리고 이런 용도로서 dll은 매우 성공적이었다. 그러나 이제 dll Hell 문제로 대부분의 프로그램들이 자신이 사용할 dll 파일을 각자의 프로그램이 설치된 디렉토리에 넣어두는 방식을 사용하게 되었고, dll 파일로 공유하는 원래의 목적은 사라졌다. 이와 같은 부분도 공통 라이브러리가 사용됨에 따라 어느 정도 해소할 수 있을 것이다.

 

 

 

● 닷넷의 특징

 

닷넷은 다음과 같은 목적을 달성하기 위해 디자인되었다.

  • 개체 코드가 로컬로 저장 및 실행되든, 인터넷을 통해 분산되든, 원격으로 실행되든 상관없이 일관된 개체 지향 프로그래밍 환경을 제공한다.
  • 소프트웨어 배포 및 버전 관리 충돌을 최소화하는 코드 실행 환경을 제공한다.
  • 알 수 없거나 신뢰할 수 있는 타사에서 만든 코드를 포함하여 안전하게 코드를 실행할 수 있는 코드 실행 환경을 제공한다.
  • 스크립트 또는 해석 환경의 성능 문제를 제거하는 코드 실행 환경을 제공한다.
  • 윈도우 기반 응용 프로그램 및 웹 기반 응용 프로그램 같은 다양한 형식의 응용 프로그램에서 개발자가 일관된 경험을 가질 수 있도록 한다.
  • 닷넷 프레임워크를 기반으로 하는 코드가 다른 모든 코드와 통합될 수 있도록 모든 통신을 산업 표준을 토대로 빌드한다.

 

위와 같은 목적을 수행하기 위해 닷넷은 공용 언어 런타임과 클래스 라이브러리라는 두 개의 중요 구성 요소가 있다. 공용 언어 런타임은 닷넷의 기초이다. 런타임은 실행시 코드를 관리하는 에이전트로서, 메모리 관리, 스레드 관리, 원격 서비스 등의 핵심 서비를 제공하며 동시에 엄격한 형식 안정성 및 다른 형태의 코드 정확성을 유지하므로 보안과 견고성을 강화한다.

 

사실 코드 관리의 개념은 런타임의 기본 원칙이다. 런타임을 대상으로 하는 코드는 관리 코드라고 하는 반면, 런타임을 대상으로 하지 않는 코드는 비관리 코드라고 한다. 닷넷 프레임워크의 다른 기본 구성 요소인 클래스 라이브러리는 다시 사용할 수 있는 형식의 광범위한 개체 지향 컬렉션으로서, 기존 명령줄 또는 GUI 응용 프로그램에서부터 ASP.NET에서 제공하는 웹 폼 및 XML웹 서비스 같은 최신의 혁신적인 기능을 기반으로 하는 응용 프로그램에 이르기까지 다양한 응용 프로그램을 개발하는데 사용할 수 있다. 

 

 

1. 공용 언어 런타임 기능

 

공용 언어 런타임에서는 메모리, 스레드 실행, 코드 실행, 코드 안정성 확인, 컴파일 및 기타 시스템 서비스를 관리한다. 이러한 기능은 공용 언어 런타임에서 실행되는 관리 코드의 기본 기능이다. 보안과 관련하여 관리되는 구성 요소의 장점으로 인터넷, 기업 네트워크 및 로컬 컴퓨터 등을 포함하는 여러 요소에 따라 신뢰도를 다르게 부여할 수 있다. 이는 관리되는 구성 요소가 동일한 활성 응용 프로그램에서 사용되는 경우에도 파일 액세스 작업, 레지스트리 액세스 작업 또는 기타 중요한 기능을 수행할 수 있을 수도 있고 없을 수도 있음을 의미한다. 

 

런타임에서는 코드 액세스 보안을 적용한다. 예를 들어, 사용자는 웹 페이지에 포함된 실행 파일이 화면에 애니메이션을 재생하거나 음악을 재생할 수는 있지만 자신의 개인 데이터, 파일 시스템 또는 네트워크에 액세스할 수는 없는 것으로 신뢰할 수 있다. 따라서 런타임의 보안 기능을 소프트웨어의 합법적인 인터넷 배포를 가능하게 하는 매우 강력한 기능을 수행한다.

 

또한 런타임에서는 CTS(공용 형식 시스템)라고 하는 엄격한 형식 및 코드 확인 인프라를 구현하고 코드 견고성을 유지한다. CTS는 모든 관리 코드가 자체 설명 방식이 되도록 한다. 마이크로사와 타사의 다양한 언어 컴파일러에서는 CTS에 맞는 관리 코드를 생성한다. 따라서 관리 코드에서는 형식 준수성 및 형식 안정성을 엄격하게 유지하면서 다른 관리되는 형식 및 인스턴스를 소비할 수 있다.

 

또한 런타임의 관리되는 환경에서는 일반적인 소프트웨어 문제를 대부분 제거한다. 예를 들어, 런타임에서는 개체가 더 이상 사용되지 않을 경우 해당 개체를 해제하면서 자동으로 개체 레이아웃을 처리하고 개체에 대한 참조를 관리한다. 이 자동 메모리 관리 기능은 응용 프로그램의 가장 일반적인 오류 중 두 가지인 메모리 누수와 잘못된 메모리 참조 문제를 해결한다.

 

런타임에서는 개발자의 생산성도 향상시킨다. 프로그래머는 자신이 선택한 개발 언어로 응용 프로그램을 작성하면서도 다른 개발자가 다른 언어로 작성한 런타임, 클래스 라이브러리 및 구성 요소를 완전히 사용할 수 있다. 이는 런타임을 대상으로 하는 모든 컴파일러 공급업체에게 해당된다. 닷넷 프레임워크를 대상으로 하는 언어 컴파일러에서는 기존 응용 프로그램에 대한 마이그레이션 프로세스를 매우 쉽게 함으로써 닷넷 프레임워크의 기능을 해당 언어로 작성된 기존 코드에서 사용할 수 있도록 한다.

 

런타임은 미래의 소프트웨어를 위해 디자인되었지만 현재 또는 과거의 소프트웨어도 지원한다. 관리 코드와 비관리 코드 간의 상호 운용성을 통해 개발자는 필요한 COM 구성 요소 및 DLL를 계속 사용할 수 있다. 또한 성능 향상을 목적으로 디자인되었다. 공용 언어 런타임에서는 다양한 런타임 서비스를 제공하지만 관리 코드는 절대 해석되지 않는다. JIP(Just in Time) 컴파일이라는 기능을 사용하면 모든 관리 코드는 해당 코드가 실행되는 시스템의 네이티브 기계어 코드로 실행될 수 있다. 동시에, 메모리 관리자는 조각화된 메모리가 발생할 가능성을 제거하고 메모리의 참조 집약성을 높여 성능을 향상시킨다.

 

 

 

 

 

닷넷 프레임워크 클래스 라이브러리

 

닷넷 프레임워크 클래스 라이브러리는 공용 언어 런타임과 강력하게 통합된 다시 사용할 수 있는 형식의 컬렉션입니다. 클래스 라이브러리는 개체 지향적이며, 사용자 고유의 관리 코드는 이 라이브러리에서 제공하는 형식에서 기능이 파생될 수 있습니다. 클래스 라이브러리를 사용하면 닷넷 프레임워크 형식을 사용하기가 쉬워질 뿐만 아니라 닷넷 프레임워크의 새로운 기능을 익히는 데 필요한 시간도 줄어듭니다. 또한 타사 구성 요소가 닷넷 프레임워크의 클래스와 쉽게 통합될 수 있습니다.

 

예를 들어, 닷넷 프레임워크 컬렉션 클래스에서는 사용자 고유의 컬렉션 클래스를 개발하는 데 사용할 수 있는 여러 인터페이스를 구현합니다. 사용자 컬렉션 클래스는 닷넷 프레임워크의 클래스와 쉽게 결합됩니다.

 

개체 지향 클래스 라이브러리에서와 마찬가지로, 닷넷 프레임워크 형식을 사용하염 문자열 관리, 데이터 수집, 데이터에비스 연결, 파일 액세스 등의 작업을 비롯한 일반적인 범위의 프로그래밍 작업을 수행할 수 있습니다. 이러한 일반적인 작업 외에도 클래스 라이브러리에는 특수화된 다양한 개발 시나리오를 지원하는 형식이 포함되어 있습니다.

 

 

닷넷의 자동 메모리 관리 기능(Automatic memory management)

 

자동 메모리 관리 기능을 제공하지 않는 언어를 사용해 본 사람들이라면 한 번쯤 사소한 메모리 유출(memory leak) 문제 때문에 고생한 적이 있을 것이다. 닷넷은 자바와 마찬가지로 메모리 관리를 자동으로 해 준다.

 

 

닷넷의 프로그램 배포

 

윈도우즈 응용 프로그램들은 인스톨 프로그램을 만들어 주는 서드 파티(Third part) 프로그램을 사용하여 인스톨 프로그램을 작성한다. 그러나 이 조차도 쉽다고 말하기 힘들다. 윈도우에서 프로그램을 인스톨하기 위해서는 수 많은 파일들을 적절한 폴더에 복사해 주어야 하고, 레지스트리에 필요한 정보를 등록하고, 사용한 COM 컴포넌트를 설치해야 한다.

 

또한, 사용자가 사용할 바로 가기 파일과 프로그램 그룹도 만들어 주어야 한다. 인스톨을 하는 것도 어렵지만 더욱 프로그래머를 힘들게 하는 것의 불가능에 가까운 언인스톨 작업이다. 하지만 닷넷은 Visual Studio를 통해 쉽게 배포가 가능하다.

 

 

 

 

닷넷의 출시 버전

 

모든 개발 언어가 공통 프레임워크를 사용하여 개발을 단순하게 만들려는 것이 닷넷의 탄생 배경입니다. 하지만 Visual Basic 6.0 버전과 닷넷은 호환성이 없습니다. 모든 언어의 호환성을 유지하기 위해서는 사용하는 데이터 형이 같아야 하는데 데이터형을 과거의 버전과 일치시킬 수 없는 작은 차이들이 문제를 일으켜 호환성 유지 전략은 포기하고, 그 대신 자신의 프로젝트를 업그레이드할 수 있도록 보장하는데 집중하기로 마이크로소프트사는 결정합니다.

 

 

1) Visual Studio 2003

 

Visual Basic 7.1 버전으로 닷넷 1.1 버전과 함께 출시되었습니다. 특징은 닷넷 컴팩트 프레임워크에 대한 지원과 더 나은 업그레이드 마법사가 포함되어 있는 것입니다.

 

 

2) Visual Studio 2005

 

이 버전부터 마이크로소프트사는 Visual Basic에 닷넷이라는 부분을 놓기로 결정합니다. 그래서 닷넷은 생략되고 2005부터는 다양한 특징이 포함되었습니다.

 

 

3) Visual Studio 2008

 

Visual Basic 9.0 버전으로 LINQ, 람다 표현식, XML, 형 추론, 확장 메서드 등이 추가되었습니다. 2007년 11월 19일 닷넷 3.5 버전과 함께 출시되었습니다. 객체 지향 프로그래밍 언어로 출시된 네 개의 버전 중에 하나입니다. 언어의 기본 구문론으로 보면 파괴적인 변화를 보지 못했지만 데이터 형식의 변경과 구조적 예외처리, 단기-순화 표현 등이 추가되었습니다. 기존의 버전보다 Integer 형은 16비트에서 32비트로 Long 형은 32비트에서 64비트로 각각 두배 증가했습니다.

 

 

4) Visual Studio 2010

 

2010년 4월에 출시되었으며, 동적 언어 런타임을 사용하기로 결정했습니다. Visual Basic과 자매 언어인 C# 사이의 동등성을 서로 가까이 가져오기 위해 공동 진화 전략으로 옮겨졌습니다. CLR과 COM 개체와 동적 상호 작용에 대한 Visual Basic의 타고난 능력은 Iron Phthon과 Ruby 같은 DLR 건설을 동적 언어에서 작동하도록 향상되었습니다.