티스토리 뷰

프로그래밍

Visual Basic과 닷넷(.Net)

야라바 2015. 1. 12. 14:49


컴퓨터 프로그램의 생성부터 실제 실행까지의 과정을 이해하는 것은 프로그래밍 세계의 기본기를 다져가며 성장할 수 있는 아주 중요한 단계입니다. 지금 다루고 있는 주제는 Visual Basic이지만 프로그래밍 언어는 CPU(중앙처리장치로 스마트폰등에 많이 사용하는 ARM부터  MIPS, PowerPC, 인텔 Atom, Celeron, Pentium등 다양한 CPU들이 존재합니다)가 이해할 수 있는 기계어(Machine Language)로 만들어지기 위한 첫번째 단계입니다. 복잡한 회로로 이루어진 CPU가 알아들을 수 있는 언어를 만든다니 쉽게 이해 할 수 없지만 아무튼 사람이 원하는 대로 기계를 동작키 위한 첫 단계가 비주얼 베이직과 같은 프로그래밍 언어입니다. VB외에도 C언어, Python, C#, Java등 다양한 프로그래밍 언어가 존재합니다.


이런 프로그래밍 언어를 기계어로 만들어주는 프로그램이 있는데 바로 컴파일러 또는 인터프리터라고 합니다. VB .Net을 구동하고 있는 Visual studio에도 VB 컴파일러가 내장되어 있습니다. 문제는 CPU 종류가 너무 많다는 것입니다. CPU간에 서로 호환되는 것도 있지만 대게는 CPU별로 이해하는 기계어가 다르기 때문에 컴파일러는 각 CPU에 맞는 기계어를 만들어야만 합니다. 이렇게 프로그램을 만드는 과정이 복잡하면 CPU를 만드는 업체나 프로그램을 만드는 사람 모두 너무 힘들고 비효율적이 되죠. 그래서 등장한 것이 바로 중간코드 또는 바이트 코드(byte code)이고 대표적으로 자바(Java) 바이트 코드와 닷넷 프레임워크의 닷넷 매니지드(Managed) 코드 입니다. 이들 바이트코드는 프로그래밍 언어처럼 사람이 읽을 수는 없지만 실행 시점에 손쉽게 기계어로 전환되는 특성을 가지고 있어서 컴파일러가 프로그래밍 언어를 번역해서 중간코드로 만들어 놓으면 가상머신(VM, Virtual Machine)이 실행 시점에 기계어로 바꾸어서 동작하게 하는 것입니다. CPU 종류별로 프로그램을 만들 필요가 없어지는 것이지요. VB 뒤에 .Net이 붙은 이유가 바로 이것입니다. VB로 작성한 프로그램을 CPU가 이해하는 기계어로 만들지 않고 .Net 중간 코드를 작성한다는 것입니다. 마이크로소프트에서는 이 중간코드를 IL 또는 MSIL(Microsoft Intermediate Language)로 말합니다.


닷넷 중간 코드를 얻는 장점과 단점을 무엇일까요? 우선 장점부터 말하면 첫째 프로그램 크기를 대폭 줄일 수 있습니다. 프로그램 작성 과정에서 필요한 다양한 기능이 닷넷 프레임워크(.Net framework)에 준비되어 있기 때문에 이들 기능을 찾아서 잘 활용하는 것이 안정적이고 성능 좋은 프로그램을 만들 수 있는 첩경입니다. 즉 많은 기능이 닷넷 프레임워크에 있기 때문에 프로그램은 그들 기능을 호출하는 것으로 구성되므로 크기가 작을 수 밖에 없습니다. 둘째 시스템 간의 호환성을 높일 수 있습니다. 닷넷 프로그램은 닷넷 가상 머신이 설치된 어떤 곳에서도 동작하므로 CPU와 무관하게 동작하는 프로그램을 만들 수 있습니다. 세째 프로그래밍 언어간의 호환성이 좋습니다. C#언어도 VB도 닷넷 프레임워크를 바라보기 때문에 사용 문법만 약간 차이가 있을뿐 거의 유사한 형태로 기능을 사용할 수 있습니다. 물론 서로 협력 형태로 사용하기에도 무리가 없고요. 끝으로 단점이라면 이전에 기계어로 만들어진 프로그램 보다는 약간 느릴 수 있다는 점입니다. 앞서 언급한 것 처럼 중간코드가 실행시점에 기계어로 전환되는 오버헤드가 있을 수 있지만 요즘은 하드웨어가 워낙 좋아져서 이러한 문제점 조차 인식할 수 없을 수준이므로 더이상 단점이 될수도 없을 것 같습니다.


닷넷 프레임워크를 사용하면서 자주 접하게 될 두가지 요소가 있습니다. 그 둘은 The .NET Framework Class Library와 Common Language Runtime으로 닷넷 프레임워크 클래스 라이브러리는 여러 언어들에서 활용할 수 있는 코드들을 모아놓은 것으로 사용자는 어떤 기능이 있는지, 그 기능들을 사용하기 위해서 전달할 파라미터와 결과로 받을 수 있는 정보는 무엇인지 찾아보아 그것을 잘 활용하면 됩니다. http://msdn.microsoft.com/ko-kr/library/gg145045(v=vs.110).aspx를 예제로 살펴보시면 닷넷 프레임워크에서 제공하는 다양한 라이브러리를 확인할 수 있습니다. Common Language Runtime은 앞서 설명한 VM에 해당하는 것으로 닷넷 프레임워크에서 중간코드로 만들어진 프로그램을 기계어로 전환해서 실행시켜주는 요소입니다.


VB .Net으로 프로그램을 작성하고 비주얼스튜디오를 통해서 만들어진 결과물은 이전에는 *.exe 또는 *.dll이었지만 이제는 어셈블리(Assembly)라고 합니다. VB .Net은 하나 또는 그 이상의 어셈블리를 산출하는데 이 어셈블리가 닷넷 프레임워크에서 다루는 응용의 단위가 됩니다. 어셈블리는 버전, 이름등 어셈블리의 기본 정보와 연관 어셈블리 정보를 담고 있는 메니페스트(manifest)와 번역된 중간코드인 모듈(modules)들로 구성됩니다. VB .Net 프로젝트의 팝업 메뉴에서 속성을 선택하면 아래의 그림과 같이 어셈블리와 모듈의 정체를 만나볼 수 있습니다.




댓글
댓글쓰기 폼