티스토리 뷰



마이크로소프트 최신 프로그래밍 언어 : Visual C#


마이크로소프트 Visual C# .NET 은 마이크로소프트 .NET 기술 기반의 새로운 프로그래밍 언어로, 개발 시간과 비용을 줄여 빠르고 쉬운 개발이 가능하다고 주장을 하고 있습니다. 이 글에서는 C#에 대한 소개와 프로그래밍의 실제 모습에 대해서 이야기하도록 하겠습니다. 테스트 및 측정 기반의 C# 언어의 전체 기능을 모두 사용하기 위해서는 이 언어가 .NET Framework와 어떻게 연동이 되는지를 파악해야 합니다. 이 글에서는 C# 및 객체 지향적 접근에 대한 논의는 물론, 프로그래밍 하는 방법과 테스트 및 측정 어플리케이션 개발에 적합한 방법에 대해서 이야기할 것입니다.


1. The .NET Framework: 배경 지식


공용 언어 런타임(CLR), 라이브러리, .NET 언어, Visuaul Studio .NET Support로 구성이 되어 있는 .NET Framework는 크로스 플랫폼 어플리케이션(Cross-Platform Application)에 대한 다수의 언어를 지원합니다. 공용 언어 스펙(CLS)는 .NET 언어들에 대한 규약과 사양을 포함하는 포괄적인 계약을 의미합니다. .NET 언어를 고려하기 위해서는 CLS 계약에 설정된 규격들을 준수해야 합니다. 마이크로소프트에서는 Visual Basic .NET, Visual C# .Net, Managed 확장을 사용하는 Visual C++과 Jscript에 대한 4개의 CLS-규격 언어를 제공하고 있습니다. CLR의 목적은 아래와 같습니다.


  1. 단순화된 어플리케이션 개발
  2. 다중 프로그래밍 언어 지원
  3. 우수한 성능과 확장성
  4. 안정하고 신뢰할 수 있는 실행 환경
  5. 단순화된 배포 방안


CLR은 실행 엔진, 가비지 콜렉터, Just-In-Time (JIT) 컴파일러, 보안 시스템과 .NET Framework 기본 요소들을 포함하고 있습니다. 




CLS 규격의 모든 .NET 언어들은 Microsoft Intermediate Language (MSIL)를 생성하는 관리 코드 컴파일러를 가지고 있습니다. MSIL은 장비에 대해서 독립적이고, Just-In-Time 컴파일, 메타데이터 등과 같은 이점을 제공합니다. 모든 .NET 어플리케이션들은 기능 단위를 구성하는 코드 컬렉션과 메타데이터를 Assembly로 구성됩니다. 모든 Assembly는 Manifest라 불리는 곳에  Assembly 이름, 버전, 의존성, 관련 파일 및 더 많은 정보를 저장하고 있습니다. 


C#과 직접적으로 연관이 있는 마이크로소프트의 .NET 기술의 다른 기능은 클래스 라이브러리입니다. 이 라이브러리는 .NET의 모든 언어로 접근이 가능한 2,500 개 이상의 클래스로 구성이 되어 있습니다. 이 라이브러리는 4개의 구성 요소로 이루어져 있습니다.

 

  1. 기본 클래스 라이브러리 (네트워크, 보안, 진단, 파일IO, 운영체제 서비스)
  2. 데이터 및 Standard ML 관련 클래스
  3. 윈도우 사용자 인터페이스
  4. 웹 서비스 및 웹 사용자 인터페이스


C#은 .NET Framework는 개발자가 세부적인 사항에 접근이 필요하다면 시스템 레벨의 접근을 허용하면서 관련 세부사항을 숨기는 고급언어입니다. 마이크로소프트는 C#을 .NET 언어에 최적화 하여 개발을 하였기 때문에, 이 언어는 .NET Framework의 이점을 본질적으로 모두 활용할 수 있습니다. 


2. C# 이란?


C#은 C++의 강력함과 Visual Basic의 쉬운 사용성을 활용하여 어플리케이션 개발을 할 수 있는 객체 지향 언어입니다. 마이크로소프트는 .NET Framework와 객체지향 언어로 C#을 개발하였습니다. 그러나 C#은 Visual C++의 개념을 확장하였습니다. 이 언어는 모든 사항이 객체로 이루어진 강력한 형식 언어입니다. 


C#의 주요 사항은 C언어에서 파생되었습니다. 그러므로 만약 C, C++ 또는 자바에 대한 경험을 가진 개발자라고 한다면, C# 개발을 시작할 수 있습니다.


3. 객체지향 프로그래밍


C#은 일반적인 C++ 정의로부터 객체 지향 언어에 대한 정의를 확장하였습니다. C#은 언어에서 정의할 수 있는 모든 타입을 객체로 정의함으로써 타입 시스템을 통합합니다. 구조체, 클래스, 혹은 배열을 사용하고자 하더라도 개발자는 이를 객체로 사용할 수 있습니다. 객체에 대한 관계를 표현하는 방법으로 객체를 생각해야 합니다. 실생활을 예로 들어, 공을 생각해보도록 하겠습니다. 하나의 공은 행위뿐만 아니라 몇 가지의 특성을 가지고 있습니다. 이 공은 특징 혹은 변수로 지정이 가능한 색, 형태, 크기를 가지고 있습니다. 또한 공은 공 튀기기, 굴리기 등의 함수 혹은 행위와 연관된 내용도 가지고 있습니다. 간단하게 C#에서는 객체는 특징과 행위를 가지고 있다고 합니다. 





C#의 OOP 제공의 가장 기초가 되는 클래스 또한 C#의 주요 요소입니다. 각 C# 프로그램은 적어도 하나 이상의 클래스를 가지고 있습니다. 이 클래스는 데이터(혹은 변수)와 행위(혹은 메소드)를 캡슐화 합니다. 관련 클래스들은 네임스페이스로 그룹화 할 수 있습니다. 이 그룹은 클래스의 조직과 명확성을 나타냅니다. 객체 역시 네임스페이스와 결합됩니다. 예를 들어 아래의 예처럼 특정 파일을 포함(include)하는 것 대신에 네임 스페이스를 사용합니다.

 

#include <stdio.h>

#include <string.h>


네임 스페이스에 있는 클래스와 객체에 접근하기 위해서 네임스페이스를 추가합니다..


using System;

(The System class includes output methods)


4. 신뢰성과 최적화


다수의 사용자들은 새로운 .NET 기술에 대해서 의심을 가지고 있고, 어떻게 .NET 기술이 윈도우의 안정성과 Visual Studio의 신뢰성을 향상 시키는지 알고 싶어 합니다. 과거에는 어플리케이션의 복잡성으로 인해 Window PC를 관리하는 것이 조금 어려웠습니다. 공유된 DLL의 소개와 이 DLL을 덮어쓸 수 있게 된 기술은 이러한 어려움을 증가시켰습니다. 게다가, 완벽하지 않은 프로그램 삭제와 관련 파일 및 공유파일을 제거는 어려움을 더욱더 증가 시켰습니다. 이러한 요소들은 PC의 불안정을 유발시켰고, 잠재적으로 운영체제를 다시 설치하게 끔 만들게 되었습니다. 


마이크로소프트는 더 이상 레지스트리 정보 및 삭제 의존하지 않도록 하였으며, 이를 통해 .NET 기반의 어플리케이션의 신뢰성과 안정성을 향상시켰습니다. .NET 프레임워크 내에서는 개발자가 서로 다른 버전의 DLL을 같은 장비에서 함께 사용할 수 있습니다. 게다가 운영체제를 대신하여 CLR에서 Managed Code를 생성하는 언어를 실행합니다. 이러한 이유로 인해 CLR은 메모리 관리, 가비지 컬렉션, 타입 안정성 등에 대한 많은 안전 점검을 수행할 수 있습니다. 


이 계층은 프로그래밍 플랫폼에 레벨을 추가하고, 더 높은 추상화는 더 높은 안전과 보안을 제공합니다. 모든 언어가 여러 개의 언어에서 상호 운용성을 가능하게 해주는 같은 클래스 라이브러리를 사용하기 때문에 일관성을 높여줍니다.


5. 디버깅과 데이터 타입


새로운 디버깅 요소들에 대한 일부분을 사용하기 위해서는 Debug 설정을 이용한 EXE 파일을 빌드해야 합니다. 또한 디버깅을 위해서는 Just-In-Time 디버깅을 사용하거나 표준 디버깅 방법을 사용할 수도 있습니다. JIT 디버깅을 사용하면, Debugger를 이용하지 않고도 빌드와 실행이 가능합니다. 만약 코드에서 예외가 발생되었다면 어디에서 에러가 발생을 했는지 알 수 있습니다. 하지만 이때는 브레이크 포인트 설정 및 코드에 대한 Step-By-Step 디버깅은 불가능 합니다. 일반적으로 디버깅을 하기 위해서는 표준 디버깅 방법을 사용해야 합니다. 이 방법은 브레이크 포인트 설정, 변수 값 확인, Step-By-Step 디버깅을 가능하게 해줍니다. 


C#은 강력한 타입 정의 언어입니다. 이는 다른 언어를 통해 신뢰성을 향상 시킵니다. VBScript나 다른 스크립트 언어와 같이 타입이 정의되지 않은 언어를 사용할 때는 변수에 대한 타입을 지정할 필요가 없습니다. 구문을 사용할 때는 런타임 에러에 대한 부분을 확인을 할 수 있지만, 컴파일 시 에러는 찾을 수가 없습니다. C#은 이러한 컴파일 타임의 문제를 해결하였습니다. C#에서 정의한 Strongly Type은 C#의 모든 변수는 관련 데이터 타입을 가져야 한다는 의미입니다. 이는 변수, 전역, 상수 모두에 해당됩니다. 이 강력한 타입은 특정 변환이 선언이 되면 에러를 표시합니다. 예를 들어 C++에서는 개발자에게 경고없이 컴파일러는 데이터를 자릅니다. 하지만 C#에서는 2개의 다른 타입의 변수 사이에서 데이터 변환이 일어나면 안전한 접근 방식을 취하고, 이를 개발자에게 알립니다.


게다가 C#은 명시적 선언을 사용합니다. C#(JAVA도 같음)은 정수 타입의 실제 크기를 지정합니다. 이는 C, C++과는 다릅니다. C, C++은 특정 머신과 관련된 적합한 사이즈를 정의하지 않습니다. 이는 신뢰성을 떨어뜨리는 특정 행위를 할 수 있는 요인이 됩니다. 


6. Managed Code와 추가적인 요소


C# Managed Code는 .NET Framework에서의 신뢰성을 향상 시킵니다. Managed code는 .NET 기술을 타겟으로 하는 코드로써, 메타데이터라고 불리는 곳에 추가적인 정보를 저장합니다. Managed와 Unmanaged code 모두 .NET 런타임 환경에서 실행할 수 있습니다. 하지만 Manage Code만 런타임 시 안정성과 상호연동성을 포함한 적절한 기능을 보장합니다. Manage code을 이용하면 Managed Data로 만들어집니다. CLR은 가비지 컬렉션 뿐 아니라 메모리 할당/해제와 같은 특정 추가적인 요소를 제공합니다. 특정 .NET 언어(Visual Basic .NET과 Jscript .NET 포함)에서는 기본적으로 Managed Data 를 사용하지만 개체에 대한 C++은 이를 사용하지 않습니다. CLR 안정성은 더욱 안전한 개발과 의미있는 디버깅 메시지를 제공하기 위해서 데이터를 검사하고 관리합니다.


C#은 구조체, 배열등 새로운 기능에 대해서 소개하고 있습니다. C#은 IF문, While문, For문 과 Do Loop문과 같은 모든 반복문을 포함하고 있습니다. 그리고 C#은 Break, Continue, Goto 문 또한 포함하고 있으며, Visual Basic 개발자가 사용했던 Foreach 구문도 소개하고 있습니다. 

이 반복문은 컬렉션을 순환하기 위해 사용됩니다. 이는 Array와 같은 데이터 타입을 반복할 때 효율적입니다. C#은 배열을 컬렉션의 특별한 타입으로 봅니다. Foreach 구문은 Array를 이용하여 매우 간결한 구문을 사용하여 반복할 수 있는 기능을 제공합니다. 예를 들어 C#에서 Foreach 구문을 이용하여 배열을 반복하기 위해서는 아래와 같은 방식으로 사용이 가능합니다. 


int [] evens = {2, 4, 6, 8, 10};

foreach (int even in evens)

{

Console.Write (“{0} “, even);

}


C#은 또한 Switch 구문에 대한 기능 향상을 제공합니다. C와 C++ 스타일의 스위치 구문에서 예외를 잡기 위해서 Catch를 가능하게 하였습니다. 많은 경우에 개발자는 Break 구문을 잊어버려 프로그램을 다음 Case에 대한 내역도 실행이 되게 합니다. C/C++ 컴파일러는 이에 대한 부분을 컴파일시 잡아 내지 못합니다. 하지만 C# 컴파일러는 이러한 실수를 잡아내고, 컴파일 에러로 나타냅니다. C#은 일반적인 실수를 잡고, 장기적으로 시간을 절약하기 위한 새로운 기능들을 가지고 있습니다. 

Back to Top


7. 이전 Visual Studio와 비교되는 시간 절약 요소





그러면 어떻게 C#의 새로운 요소들과 프레임워크, 향상점을 테스트, 측정 및 오토메이션 산업에 적용 시킬 수 있을까요? 서버 기술과 같은 몇몇의 마이크로소프트 .NET 프레임워크 컴포넌트들은 직접적으로 테스트 및 측정 개발자들에게 영향을 미치지 않습니다. 하지만 Visual Studio .NET 환경은 기존의 Visual Studio 개발자들의 프로그래밍 스타일을 변경시키는 요소가 될 것입니다.


C# 뿐만 아니라 다른 .NET 언어에서 언급된 아래의 다양한 요소들은 테스트 및 측정 개발자에게 도움이 될 수 있습니다. NI Measurement Studio와 같은 추가적인 컴포넌트를 사용은 테스트 및 측정에 대한 특정 어플리케이션의 효율적인 개발에 NI는 권장하고 있습니다. 


짧은 개발 시간


마이크로소프트는 .NET 프레임워크 이점을 사용할 수 있을 뿐 아니라 개발 시간을 줄여주는 이점을 포함하여 C#을 디자인 하였습니다. 이러한 목표를 달성하기 위해서 마이크로 소프트는 Visual Baisc 이후에 이를 모델링 하였습니다. C#과 Visual Baisc .NET은 거의 90% 동일한 기능적 내역을 포함하고 있습니다.

 

간단해진 개발 


C#에서 개발 기한을 단축시키는 하나의 요소는 언어를 이용하여 어떻게 프로그램을 배포하는가에 대한 내역입니다. CLR은 어플리케이션을 실행 가능한 파일(EXE) 혹은 DLL이 아니라 Assembly 기반의 배포가 가능하게 만들어줍니다. 이 Assembly는 자체적으로 설명이 가능하며(Self-Describing), 일반적으로 레지스트리에 저장이 되는 모든 정보를 하나의 장소에 저장을 하고 있습니다. 이는 코드를 보장하고 이에 대한 관련 정보에 대한 손실이 없도록 적합성을 제공합니다. 이 Assembly들은 각각 버전을 가지고 있기 때문에, 프로그램에서 각각의 오래된 버전을 유지보수 하는데 필요한 기능을 제공합니다. 이러한 버전에 대한 다른 이점은 서로 간섭하지 않고 동시에 두가지의 버전을 실행할 수 있다는 점입니다. 


적은 코드 작성 


Visual Basic 가 비슷한 방법론은 C#이 제공하는 또다른 시간 절약에 대한 요소 중 하나입니다. C#은 속성 기반의 프로그래밍 언어입니다. Microsoft Transaction Server에서 처음 소개된 속성 기반의 프로그래밍 언어는 분산 처리와 같은 복잡한 태스크를 구현할 수 있습니다. 개발자는 간단하게 일반적인 요구사항을 선언할 수 있습니다. 이 속성들은 개발자를 위한 태스크를 구현해주는 이점을 가지고 있습니다. 속성 기반 프로그래밍은 복잡성을 줄여주고, 실제 태스크에 대한 코드를 생성해 줍니다. 


C#을 사용하지 않게 되면, 이러한 속성들은 프로그램 소스 코드로부터 분리됩니다. 그러므로 소스코드가 수정이 되면, 속성 정보는 코드와 동기화 될 수 없습니다. C#이나 .NET 언어를 사용하면 이러한 속성은 비호환성에 대한 이슈를 제거하는데 사용이 됩니다. C#에서 개발자가 이 속성들은 중간언어로 컴파일 하게 되면, 이 속성들은 메타데이터의 일부가 됩니다. .NET Framework는 동기화, 직렬화 및 유연한 문제 해결을 위한 사용자 정의 속성에 대한 다양한 속성 타입을 제공하고 있습니다. 


테스트 및 측정 어플리케이션 개발을 위해서 데이터 수집, 인스트루먼트 컨트롤, 분석 및 시각화 기능을 제공하는 NI Measurement Studio 컴포넌트를 사용할 수 있습니다. 이 컴포넌트는 .NET 환경과 호환이 가능합니다.


8. 이전 버전보다 강력하고 안전한 프로그래밍


멀티 쓰레딩 


.NET Framework는 멀티 쓰레드 프로그래밍을 위한 강력한 기능을 제공하기 때문에, C#은 이러한 어플리케이션을 위한 언어라고 할 수 있습니다. 오늘날에는 Visual C++, NI LabVIEW, NI LabWindows/CVI 와 같은 언어를 기반으로 멀티 쓰레드 기반의 프로그램을 만들 수 있습니다. 멀티쓰레드에 대한 아이디어는 C#에서도 같습니다. 이는 다수의 CPU에서의 복수 실행과 병렬처리 그리고 단일 프로세서 시스템에서의 효율을 위해서 사용됩니다. 그러나 멀티쓰레딩은 몇몇의 단점을 가지고 있습니다. 예를 들어, 몇몇의 멀티쓰레딩 기반의 어플리케이션은 더 복잡한 응용 프로그램등과의 경쟁 조건을 만들어 낼 수 있습니다. C#을 사용하면 단순화를 위해 System Threading Namespace를 사용합니다. 이에 대한 설정은 Thread 클래스에 구성이 되어있습니다. 이 Thread의 클래스는 Thread의 확장 부분을 캡슐화 하고 있습니다. 이러한 구조는 Core Thread 클래스에 포함하고 있는 정보들을 통해서 어플리케이션의 복잡성에 도움을 줍니다. 경합 조건을 해결하기 위해서 접근에 대한 직렬화 또는 Join 메소드를 활용한 동기화를 이용할 수 있습니다. 다시 말하지만, 이 두가지 옵션들은 System-Threading 네임스페이스에서 사용이 가능합니다. 


기존 어플리케이션의 재사용 : 마이크로소프트 Visual Studio 6.0과의 통합


Visual Studio .NET은 Visual Studio 6.0에 대한 프로젝트를 새로운 ADE와의 통합에 도와주는 Upgrade Wizard를 제공하고 있습니다. 예를 들어, Visual Basic 6.0 프로젝트 파일(확장자: vbp)를 Visual Studio 7.0에서 열면, Upgrade Wizard는 실행이 됩니다. 마이크로소프트는 또한 Visual Studio 환경 밖에서 프로젝트를 업그레이드 하기 위한 커맨드 기반의 툴을 제공하고 있습니다. 이 업그레이드 툴은 기존의 코드를 Visual Basic .NET 구문으로 변경하고, Visual Basic .NET에서 사용할 수 있는 폼과 컨트롤들을 교체합니다. 


Visual Basic 6.0과 Visual Basic .NET의 차이로 인해, 프로젝트 내의 특정 요소들이 직접적으로 변경이 되지 않을 수 도 있습니다. 이러한 경우, 마이크로소프트는 어플리케이션의 수정에 대한 안내를 할 수 있는 업그레이드 보고서를 제공합니다. 이러한 이유로 마이크로소프트는 업그레이드를 위한 기존 레거시 어플리케이션을 어떻게 준비해야 하는지에 대한 백서를 제공합니다. 모든 Visual Studio 어플리케이션을 Visual Basic .NET으로 업그레이드 할 수 없음을 명심하셔야 합니다.


COM


이 기술은 COM 컴포넌트들과 .NET 컴포넌트들과의 상호 연관을 가능하게 합니다. 다른 말로 하면, .NET 언어에서 COM 컴포넌트를 호출은 물론 반대 상황에서도 가능하게 합니다. 레거시 COM 컴포넌트를 .NET 언어에서 호출하기 위해서는 Type Library Importer라는 툴을 사용해야 합니다. 이 툴은 COM 컴포넌트에 대한 타입 라이브러리를 가져오고, 이 컴포넌트를 호출하기 위한 .NET Proxy를 생성합니다. C#은 COM 컴포넌트를 Reference로 추가하는 경우 자동적으로 이 툴을 호출합니다. 


COM과 .NET 기술 사이에는 구현상의 많은 차이가 있지만, 비슷한 다수의 이점들이 있습니다. 예를 들어 COM을 사용할 때 컴포넌트를 제공하기 위한 정교한 인프라를 제공해야 합니다. COM 오브젝트를 생성하기 위해서 Factory Class를 구현해야 하며, 동적으로 인터페이스를 처리하기 위한 함수들도 구현해야 합니다. 그리고 적절한 메모리 관리를 위한 내역도 수동적으로 구현해야 합니다. C#과 CLR은 이러한 프로세스를 자동적으로 처리합니다. 하나의 동작을 위한 오브젝트를 생성하고, 이에 대한 인터페이스를 처리하게 되면 가비지 컬렉터는 메모리 관리를 위한 처리를 하게 됩니다. 이는 COM 구성요소 생성을 단순화 합니다. 


안전한 프로그래밍 


안전한 프로그래밍과 적은 런타임 에러는 어플리케이션의 버그 수를 줄여 개발 시간과 유지 보수 비용을 줄여줍니다. C#의 Managed Code를 사용하게 되면, CLR은 타입의 안정성, 메모리 중복사용, 메모리 관리와 가비지 컬렉션을 처리합니다. 


이는 메모리 릭과 이와 관련된 이슈를 줄여줍니다. 메모리 관리를 처리하는 CLR은 코드에서 직접 메모리를 접근하는 것을 막고, 포인터를 없애며, 다른 메모리 중복과의 충돌을 방지합니다. 이는 CLR이 추가하는 추상 계층으로 C#에서 프로그래밍 하는 것은 다른 하위 레벨의 Win 32API나 COM에서 프로그래밍하는 것보다 쉽습니다. CLR은 보안과 안정성을 보장하여 잘못된 프로그래밍을 방지합니다.


타입의 안정성은 견고하고, 안전한 프로그램을 만드는 다른 요소입니다. 마이크로소프트는 C#에서 적절한 코드 실행을 제공하기 위해서 몇 가지의 요소를 통합하였습니다. 예를 들어 모든 동적 할당된 오브젝트들과 배열들은 0으로 초기화 됩니다. 또한 C#은 지역 변수들을 초기화 자동적으로 초기화 하지 않고, 이를 컴파일러는 개발자에게 경고합니다. 배열에 접근할 때는 소프트웨어에서 자동적으로 어플리케이션의 길이를 확인합니다. C/C++과는 달리 C#에서는 할당되지 않은 메모리를 중복으로 사용하거나, 유효하지 않은 참조를 생성할 수 없습니다. 





9. 잠재적 방해물


만약 당신이 .NET을 사용하는데 충분히 준비되어 있지 않다면 개발자가 해결해야 하는 몇 가지의 요소들이 있습니다. C#의 많은 요소들은 개발자가 적절히 사용할 줄 안다는 가정하에 어플리케이션 개발이 많은 이점을 제공할 것입니다. 다른 요소로는 Conversion Wizard를 들 수 있는데, 이는 특정 조건에서만 실행이 된다는 점을 명시하셔야 합니다. 


Unmanaged Code : 오버헤드, 메모리 관리, 포인터 


이 글에서는 C#의 Managed Code의 사용에 대한 이점을 이미 알렸습니다. 그러나 C# 프로그램에서는 Unmanaged code 또한 호출할 수 있습니다. 이는 C#과 .NET Framework의 디자인을 수정해야 하는 많은 문제점을 야기하기도 합니다. Managed Code 환경으로 변환하지 않고 레거시 코드를 호출할 때마다, 이 코드는 운영체제에서 직접 실행되는 Unmanaged Code를 호출하게 됩니다. 만약 Managed 환경에서 Unmanaged 환경으로 전환이나 이를 다시 돌아가야 한다면, 이는 오베헤드와 관련된 문제를 가집니다. 그러나 만약 이를 수행하지 않는다면, Unmanaged Code를 호출과 관련된 위험성을 실행하게 됩니다. C#은 이러한 오버헤드를 피하기 위해서 .NET 메모리 관리를 우회하고 메모리로부터 직접 데이터를 받는 방법을 제공합니다. 하지만 이러한 방법을 사용하게 되면 CLR의 메모리 관리에 대한 이점을 사용할 수 없습니다. 이러한 문제를 피하기 위해서 기존 어플리케이션을 .NET Framework에 맞게 수정해야 합니다. 

이는 기존 어플리케이션 기능을 가지거나, 가지지 않은 상태로 프로세스를 통해서 시간을 허비하는 잠재적 낭비 현상을 발생 시킬 수도 있습니다.


레거시 어플레케이션과 COM의 지원 


C#에서 COM 컴포넌트를 호출하기 위한 Type Library Importer를 위에서 소개하였습니다. 마이크로소프트는 COM 기술을 레거시 기술로 인식하기 때문에, 이는 .NET Framework에서 기본 컴포넌트로 간주되지 않습니다. Visual Studio는 COM 컴포넌트가 호출 될 때, Visual Studio는 Assembly에 대한 간단한 Wrapper Class를 생성합니다. 기본 컴포넌트가 아닌 요소를 언어에서 사용할 때는 성능에 대한 감소를 확인할 수 있습니다. Visual Studio .NET에서 레거시 컴포넌트를 호출하는 것 또한 다르지 않습니다. 때때로 개발자는 COM 상호 연동성을 위해서 성능 저하 상태로 실행을 하게 됩니다. 게다가 COM 컴포넌트가 VARIANT 타입을 사용하게 되면, 이는 VARIANT 에서 .NET 객체로의 변환을 필요로 하게 됩니다. 이는 특정 프로퍼티와 파라 미터들에 대한 타입의 유효성 확인을 어렵게 합니다. 


10. 결론


만약 사용하는 개발 환경이 익숙한 경우, 그 환경을 지속적으로 사용할 것을 권장 드립니다. 하지만 Visual Basic 6.0 혹은 Visual C++ 6.0 사용자라고 한다면, 개발 언어에 대한 선택의 기로에 있다고 할 수 있습니다. 운영체제의 메모리에 직접 접근하지 않거나 Unmanaged Code를 사용하지 않는다면 C++의 대안으로 C#을 추천할 수 있습니다. 만약 Visual Basic 6.0 개발자라고 한다면, 프로그래밍 옵션에 대한 확장의 필요성을 느낄 좋은 기회가 될 수 있습니다. 


C#은 Visual Basic의 사용 편의성을 기반으로 디자인되어 있지만, 구문에 대한 변경들을 배워야 하기 때문입니다. 이는 NI LabVIEW와 같은 그래픽 기반 개발 환경을 평가하는 좋은 시간이 될 수도 있습니다. 그러나 만약 Visual Studio의 최신 버전 사용에 대한 거리낌이 없다면, 간단한 C# 어플리케이션의 개발을 시작으로 Visual Studio .NET 평가해보는 것을 제안합니다. 언어를 옮기는 것에 몇몇의 문제점이 발견될 수도 있지만, 아주 놀라운 즐거움 역시 이를 통해서 발견할 수 있기 때문입니다. 


마이크로소프트 최신 언어에 대한 더많은 자료는 Microsoft MSDN에 찾을 수 있습니다.


이 글이 도움이 되셨나요? 그렇다면 아래의 그림을 클릭해주세요.



댓글