티스토리 뷰

Application/C/C++

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

알 수 없는 사용자 2011. 6. 28. 01:02

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

워.. 거의 3주만에 작성하는 강좌입니다..

요새 시간이 엄청 빠르게 지나가는군요..

이것저것 일도 꽤 있고, 여러사람 만나는 중이라서요..

그래도, 시간을 내어 강의를 작성해 봅니다..

 

Stdio? Stdlib? 일단 화면에 뭐가 보여야 말이지..

일단, 전의 강좌에서 나오던게 있었죠?

맨 앞에 거의 무조건 등장하던것..

#include <stdio.h>

이런것 말이에요..

그리고 printf(어쭈구리저쭈구리); 요런것도 나왔지요?

일단 작성해 보신분들은 아시겠지만 printf란 놈이 화면에 뭔가 뿌려주는놈이라는걸 눈치채셨을겁니다.

맞습니다. 화면에 뭔가 뿌려주는놈이죠..

 

그전에 함수란 녀석에 대해 알아봅시다.

함수가 뭘까요?

한마디로,

“뭘 집어느믄 뭘 뱉는 놈입니다.”

 

일단, 어느 실행프로그램이건간에, main() 함수는 꼭 있습니다.

함수중에 그게 없으면 라이브러리라고 부르지요.

 

그리고 매우 기본적인건데..

{ } 요거는 안에 들어있는걸 하나의 프로세스로 생각하자는거죠..

 

자, 이제 c 프로그램은 웬만큼 다 보고 뭐하는놈인지 들여다 볼수 있게 되었습니다 ^^

 

그런데 아직까지 #include에 대해서 이야기를 안 했다고요?

include가 한국어로 뭐죠?

네. 맞습니다. 포함이라는 뜻이죠..

 

사실 printf같은 함수의 경우 ‘만들어진 함수’입니다.

원래 c 컴파일러에 내장되어 있는게 아니에요!

리눅스의 경우 glibc라는 함수의 모임에 있는겁니다.

 

뭐, 그걸 갖다 쓰는겁니다.

그럼 뭘 갖다 쓰는걸까요?

stdio라는걸 갖다 쓰네요?

stdio를 보고 스튜디오라고 생각하신 분이 계시다면..

그렇게 생각하셔도 좋습니다..

뭐, 그래도 제대로 알려드리는게 좋겠지요?

이런 기본은 찾아보면 맨날 나옵니다. 지겨워요 ㅋㅋ

std는 standard의 축약이고,

io는 input, output의 축약입니다.

그러니까, 말 그대로 표준 입출력 라이브러리지요.

 

그냥 키보드 입력받고, 화면에 텍스트 출력해주는, 매우 기본적인 입출력에 대한 라이브러리이죠.

아니, 왜 그래픽부터 시작 안 하냐고요?

에이.. 방정식도 모르는데 미적분 하려고요? 뭐 할수도 있겠져..

그런게 가능한 천재라면 왜 제 강좌를 보고 있는거죠?

 

여담이지만, 요즘은 정말 방대한 라이브러리 안에서 살고 있습니다..

컴퓨터 프로그래밍의 꽃은 자료구조라고 생각하는데..

실제로 그 꽃으로, STL(Standard Template Library)이 있지요..

그걸 보고 있자면.. 정말 사람이 생각할 수 있는건 다 불태워서 생각했다고 생각합니다..

그래픽 라이브러리라던가, 3D 라이브러리..

돈을 주고 사야 하는 상용 라이브러리..

정말 웬만한건 라이브러리가 다 있습니다..

그걸 가져다 쓰면 되는거지만..

알아야 갖다 쓰죠?

 

뭐, 저는 항상 이야기합니다만, 기본이 가장 중요합니다.

 

하는김에 코드랑 헤더랑 왜 분리해야 하는지도 좀..

지금 오픈소스쪽 프로그램들은 사실, 분리를 하지 않아도 별 관계는 없을듯 싶기도 하고..

굳이 분리를 해야 하나? 라는 생각을 하시는 분들도 상당히 많습니다만..

아무래도 헤더와 프로그램은 분리하는게 편하지요.

 

일단, 헤더와 프로그램을 분리하게 되면..

헤더에 함수가 하는 일과 주어야 하는 인수에 대한 설명만 주석을 달아주고, (사람이) 헤더의 내용만 가지고 라이브러리가 무슨 일을 하는지 알아보기가 쉽다는거죠..

아니면, 공개를 하는데 소스코드는 웬지 주고싶지 않다고 생각할 때, 헤더파일만 공개하면 되니까 코드 보호가 되기도 합니다..

실제 기업에서 라이브러리를 오픈할때 많이 이용하는 방식이죠..

 

굳이 헤더와 소스를 구분해야 할 필요가 없다고 느끼시면 i dont care. 별로 상관은 안 하겠습니다만..

(실제로 저도 짧은 프로그램을 작성할 경우 헤더를 작성하지 않습니다.. 블럭쌓기도 얼마나 분리를 할지는 잘 모르겠어요 ^^;)

많은 분들이 분리를 이용한다는건, 뭔가 편해서 그럴 가능성이 매우 높지요..

 

지금 당장은 헤더분리에 대해서 모든 곳에 적용하려고 생각하진 않으셔도 별 상관은 없습니다만,

나중에 필요할 경우 쉽게 적응할 수 있을 정도로만 알아두시면 될것입니다.

사실, 뭐 어려운것도 아니고요.

 

int sum(int a, int b) {

  int tmp_sum;

  tmp_sum=a+b;

  return(tmp_sum);

}

이런 함수를 작성하였다고 할 때,

 

int sum(int a, int b);

이런식으로 함수와 인수만 헤더로 분리할 수가 있지요.

 

이게 처음에 조금 있을때는 별로 크게 신경쓰이진 않는데, 프로그램 덩치가 좀 커지면 ‘아 왜 사람들이 헤더랑 소스랑 분리하는지 알겠다’라고 생각이 드실겁니다..

 

 

그럼 또 빠른 시일 내에 5일차 강의를 들고 찾아뵙겠습니다..