VisualStudio.C++.C#2014. 10. 25. 18:35



 

1. API

 

Application Programming Interface 약어,

의미 : Interface for Application Programming.

- 소프트웨어 분야에서 응용프로그램 만들 때 "통신 대상"과 통신(제어, 정보획득등)구현을 위하여 사용할 수 있는 미리 만들어진 수단(Interface, 코드로 구현되어있음)을 의미하는 범용 용어. 이때 Interface 란 일상적인 용어일 뿐, 기술적으로 한정적인 표현 아님.

 

유사한 용어로 SDK (Software Developement Kit, 소프트웨어 개발킷트) 라는 용어도 있으나, 이는 응용프로그램을 만들 수 있게 하는 개발도구의 집합을 의미하는 API를 포함하는 개념의 용어이다. 즉, API와 더불어 API 활용예제, 검증도구등을 모두 총칭해서 SDK라고 표현함.

 

"통신대상"에 따라 API는 다양하게 있음.

- 통신대상이란 여러가지가 있을 수 있음.

1. 어떤 운영체제에서 응용프로그램이 개발될 때 운영체제와 통신을 할수 있도록 제공되는 API가 있을 수 있고, 이때 응용프로그램입장에서 통신대상은 운영체제임.

2. 응용프로그램이 PC나 스마트폰에 연결된 장치와 통신할 때 장치와 통신가능하게 하는 API가 있을 수 있고, 이때의 통신대상은 장치임.

3. 웹서비스가 제공되고 있는데, 다른 웹앱(웹응용프로그램)에서 웹서비스와 통신하기 위하여 제공하는 API가 있을 수 있고 이 경우의 통신대상은 웹서비스임.

 

 

2. win32 API

win32 API : 32비트 윈도우 운영체제에서 응용프로그램 개발시 활용 가능한 MS에서 제공하는 API.

- 윈도우 운영체제에서 개발하는 응용프로그램이 운영체제와 통신할 때 사용할 수 있는 API 이며, MS에서 만들어서 제공하는 것.

- 윈도우 3.1 에서는 16비트 운영체제 였고, 윈도우3.1에서 제공하는 API를 win16 API 라고 하였다. 여기서 말하는 win16 이란 16비트 윈도우 운영체제를 의미함.

- 윈도우 95 부터 32비트 운영체제 였고, 이때 이후의 API를 win32 API 라고 함. 용어에서 win32 란 32비트 윈도우 운영체제를 의미함.

- 이름이 win32라고 32비트에서만 사용가능한 것은 아님. 현재 많이 보급된 64비트 운영체제에서도 win32 API는 그대로 사용 가능함..

(64비트 윈도우 운영체제에 있는 WOW64 에 의하여 win32 API를 그대로 사용가능함. 아래 3.WOW64 볼것.)

 

win32 API 구현 실체.

- C언어로 만들어진 DLL 형식의 함수 라이브러리. 윈도우 응용프로그램 개발시 win32 API 에서 제공하는 수많은 함수들을 호출하여 활용함.

- win32 API 의 핵심 DLL  -> kernel32.dll, user32.dll, gdi32.dll. 이들 DLL내에서 함수들이 여럿 제공됨.

 

win32 API 의 기능 

윈도우 운영체제에서 응용프로그램을 만들 때 필요한 기반은 모든 것이 제공된다.(윈도우 운영체제가 관련된 것에 있어서는 그렇다는 의미. 수치 알고리듬 같은 건 없다. )

예로 윈도우 운영체제에서 창이 있는 프로그램을 만들어야 한다 치자. win32 API에서 제공하는 함수 들을 이용하면 몇 줄(약 30줄 정도) 안되는 코드로 아래와 같은 창을 쉽게 만들어낸다.

 

 

 

win32 API 이용하지 않고 직접 C코딩으로 위와 같은 창을 구현해도 된다. 이전 도스시절엔 진짜 밑바닥 부터 쌩코딩 했었다. 코드 라인이 수천줄 나온다. 현재 화면에 보이는 모든 요소 하나 하나 그리고 사용자의 마우스 처리부 코딩하는 것 들을 모두 작성해야한다.

 

 

3. WOW64

- 앞의 2번 win32 API를 보면 64비트 운영체제에서는 win64 API 가 제공될것 같지만, win64 API는 없고, 여전히 win32 API를 64비트 운영체제에서도 그대로 사용함. 이는 WOW64라는 것이 있어서 win32 API 를 64비트 운영체제 시스템에서도 사용가능하게 해주는 것임.

- WOW64 (Windows on Windows 64) 는 64비트 윈도우즈 운영체제의 하위 시스템이며, 우리가 32비트 응용프로그램을 64비트에서도 정상 작동시킬 수 있는 이유가 WOW64  때문임. 따라서, 64비트 윈도우 운영체제에서 응용프로그램 개발시 win32API를 이용했듯이 win64 API를 기대하면 안됨.

 

VS2010 의 VC++ 프로젝트 타입 선택할 때도 아래 그림과 같이 win32 는 있어도 win64 라는 것은 없음. (아래그림 붉은박스부분의 win32  api기반 프로젝트 타입)

 

 

 

 

4. MFC

Microsoft Foundation Class.

앞의 win32 API 로 윈도우 기반 응용프로그램 개발이 가능하나 MS사에서는 C++클래스 기반으로 미리 만들어진 클래스 라이브러리를 제공해준다.

MFC를 사용한다고 해서 win32 API를 사용 못하는 것은 아니다. MFC기반으로 프로젝트 생성하고 내부 세부 코딩에서는 win32 API코딩가능하다.

개발자의 빠른 구현을 위해 만들어진 것이므로 자체체계가 있고 이 체계를 이해해야 능숙하게 활용이 가능하다.

 

 

5. .net Framework.

공용언어 런타임(CLR)이라는 것 기반으로 하여 응용프로그램이 작동되는 방식이다. 플랫폼 의존성을 없애기 이하여 도입된 것이다.

앞의 win32 API나 MFC와  운영체제사이에는 아무것도 없었으나, .net Framework 에서는 CLR계층을 거쳐서 운영체제와 연결되는 구조다.

 

 

win32 API, MFC, .net 중에 뭘로 만들까? 

 

응용프로그램 만드는 입장에서는  win32 API나, MFC나, .net 이나 어차피 해당 라이브러리 활용하여 코딩하는 것이며, 미리 만들어서 제공되는 라이브러리의 기능이  얼마나 많은 것을 담고 편리하게 구축 가능한가가 중요할 것이다.

 

라이브러리 함수에서  제공하는 기능이 많을 수록 해당 라이브러리 활용하기 위해서 신규로 지식 습득해야할 양은 많아진다. 그 반면 코드 구현과정자체는 간단해진다.

라이브러리 에서 제공하는 기능이 단순할 수록 신규 지식 습득할 것은 작아지나, 목적한 프로젝트를 달성하기 위해서 코드 구현 과정에서는 개고생이다.

 

개발과정의 편의성 측면에서는 .net ,mfc, api 순이다. .net에서는 2~3줄의 코딩으로 될것이 API로는 수백줄의 코딩을 해야할 정도다. 그 만큼 미리 만들어진 것에서는 .net 이 우월하다.

 

실행프로그램의 처리의 즉시성 측면에서는 그 반대다. .net 은 CLR기반이라 네이티브 C대비 분명히 느린 경우가 많다. 느리다의 의미는 어떤 이벤트에 대한 반응이 느리다는 의미다.

 

타이밍이 중요하고  즉시 처리( 수밀리초 이하의 즉시성 정도)가 중요한 분야에선 거의 win32 API수준에서 처리되는 것이 타이밍의 신뢰도가 높다. 주식시세 처리나 주문 처리같은 경우가 대표적이다. 증권사 HTS의 통신 부 대부분이 win32 API기반으로 만들어져 있다.

 

결론 : 상황과 필요에 따라 골라서 구현하도록.

 

 

 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

 

 

///145.

 

 

Posted by 리치굿맨

댓글을 달아 주세요