티스토리 뷰

Application/C/C++

[강좌] 블럭쌓기 만들기 2일차

알 수 없는 사용자 2011. 6. 5. 04:05

2일차 강좌를 시작하기 전에..

아.. 오랜만입니다.. 거의 일주일만인가요?

정말 정신없이 살고 있는것 같습니다..

정신도 없고 시간도 없고 돈도 없군요.. 최악입니다 ㅋㅋ

하지만 2차 강의자료까지는 완료를 지어야 저는 제 나름대로, 강좌를 보시는분 나름대로 매듭을 지을 수 있을테니까요..

솔직히 말씀드리자면 저도 잘 모르면서 강좌를 진행하는 중입니다.

1일차때 이미 말씀드렸지만, 지금 강좌를 진행하는 내용은 다른 강좌내용을 보고 정리하는 내용이 아니고 직접 작성하는겁니다..

물론 다른 훌륭한 오픈 강좌들이 많습니다만, 1차 강좌는 제 자신에 대한 매너리즘 극복의 의미가 더 큽니다..

사실 오늘 강좌는 별건 없지만 중요한 내용중의 하나입니다.

자, 시작하죠..

 

플랫폼 인디펜던스 프로그램은 뭐임?

Platform Independance, 즉 플랫폼에 의존적이지 않은 프로그램을 말합니다..

대표적인 플랫폼 인디펜던스 프로그램은 거의 대부분 오픈소스입니다..

플랫폼의 범위를 어떻게 설정하느냐에 따라 달라질 수는 있습니다만,

(특히 요즘들어 모바일까지로 범위를 설정하는 경우도 있는듯 싶습니다)

제가 볼때는 설계가 잘 된 프로그램이면 어디에서든 돌릴 수 있다고 봅니다..

 

멀티플랫폼이나 크로스 플랫폼이라고 이야기하기도 합니다..

사실 멀티플랫폼이라는 말이 더 많이 쓰입니다..

완벽한 플랫폼 비의존이라는건 있을수가 없는 일이니.. ^^;

 

그럼 대충 뭐가 있는지 한번 볼까요?

 

예전 trolltech라는 이름을 가지고 있던 회사가 있습니다..

현재는 nokia社로 인수되었는데, 그 회사에서 만든 qt라는 ui kit1가 있는데, c++로 이루어져 있습니다..

플랫폼 인디펜던스라고 하면 대표적일수 있지요..

물론 Sun Microsystems社(현재는 Oracle社에 합병되었습니다)의 java도 플랫폼에 비의존적이라고 할 수 있을 정도입니다..

Macromedia社(현재 Adobe社에 합병되었지요)의 Flash는 논란이 많긴 합니다만, 플랫폼 비의존이라고 말할 수 있을 정도입니다..

음.. 설명하다보니 웬지 없어진 회사들의 서비스만 적어놓은것 같군요 Array

뭐, 지금까지의 오픈소스로 보시면 될것입니다.. 非오픈소스인 거대기업이 오픈소스를 그만큼 두려워한다는 반증이니까요..

(아, 물론 오픈소스 == 플랫폼 비의존은 아닙니다만, 둘은 굉장히 깊은 상관관계가 있습니다)

 

웹쪽으로는, 웬지 전쟁입니다..

일단, Mozilla 재단의 Firefox Browser가 대표적인 멀티플랫폼이지요.

Opera Software社의 Opera Browser 역시 플랫폼 상관안하고 돌아가지요..

Google社의 Chrome Browser를 빼먹으면 또 섭하겠지요?

그리고 서버로는 apache group의 apache http 서버가 있습니다..

어느정도 제한이 있긴 합니다만, 웬만한곳에는 다 돌아갑니다..

사실, 오픈소스 OS가 퍼지는 원동력은 웹이라고 해도 과언이 아닐 정도입니다..

 

 

그외에도 많은 오픈소스 프로그램들은 플랫폼에 상관없이 돌아가는듯 싶습니다..

그 이유는 아무래도, 소스가 오픈이 되어있다보니 새로운 플랫폼에 돌릴거라면 거기에 맞춰 새로 컴파일하면 되니까요 Array

 

사실, 대부분의 멀티플랫폼 어플리케이션들은 “*nix에서 돌아가는가?” 가 관건이 되지요.

GNU Project를 비롯하여 *nix 플랫폼에서 돌아가는 대부분의 어플리케이션들은 맥이나 윈도우에서 거의 무조건 돌아간다고 봐야겠지요.

 

제가 강좌를 gcc로 진행하는 이유는, 언제 어디서나 장소에 구애받지 않고 코드를 수정할 수 있고, 어느 플랫폼이건 간에 돌리면 돌아가는 코드를 짜는게 어렵지 않다는걸 보이기 위해서지요.

 

뭐 사실 웹이건 어플리케이션이건 표준을 따라가면 작성할 코드의 양은 상당히 줄어듭니다.

 

 

플랫폼 인디펜던스 프로그램은 어떻게 작성할까?

거창한것처럼 말했지만 사실, 별것 없습니다..

UI나 멀티쓰레딩, 시간과 같은, OS에 의존적인 부분만 분기하여 작성하면 됩니다.

아예 QT의 스타일을 따라가는 방법도 있겠습니다만, 바로 따라가기는 힘들 정도로 방대합니다..

물론 QT 스타일을 따라가면서 C++쪽으로 언어 성향을 따라가는것이 최고겠습니다만..

강좌를 진행하는데 있어서 곁다리로 설명해야 될 것이 산더미가 되어버립니다..

그쪽은 아예 레퍼런스 서적을 참조하는 편이 이득입니다..

 

그럼 모두의 친구 Hello World를 플랫폼별로 만들어 볼까요?

#include <stdio.h>
 
enum Modes { Release = 0, Debug };
enum Platforms { Other, Windows, Apple, Linux };
const char* PlatformStr[] = { "Other Platform", "Windows", "Apple", "Linux" };
 
int main()
{
  enum Platforms platform = Other;
  enum Modes mode = Release;
#ifdef _DEBUG   
  mode=Debug;
#endif
#ifdef _WIN32   
  platform=Windows;
#endif
#ifdef __APPLE__
  platform=Apple;
#endif
#ifdef __linux__
  platform=Linux;
#endif
  if(mode) printf("Debug Mode : ");
  printf("Hello, %s\n", PlatformStr[platform]);
  return(0);
}

 

단지, 분기를 좀 넣으면 되는것 뿐입니다..

그냥 OS별로 신경쓴다고 생각하면 되지요..

 

좀더 분기를 넣어보고 싶었습니다만, 긴 소스는 짜증나잖아요. 그쵸?

 

자 2일차는 여기까지만 하지요.

 

 

 

초반 강의가 짧다고 계속 짧을거라 생각하지 않으시는게 좋을거에요 Array