'헤더파일'에 해당되는 글 1건

  1. 2013.02.15 모듈화 프로그래밍 (Modular Programming)

모듈(Module)이란?

: 소프트웨어에서 말하는 모듈이란 프로그램의 일부분을 의미하는 것이다.

C언어를 이용하여 계산기에 관련된 함수들을 구현했다면, 이러한 함수들의 집합도 하나의 모듈이 될 수 있다.


※ 일반적으로 소프트웨어 공학에서 이야기하는 모듈(module)이라는 것은 크게는 하나의 파일이 될 수도 있지만,

작게는 하나의 함수가 될 수도 있다.




외부 변수의 사용: 키워드 extern (External = 외부의, 밖의)의 의미.

: ex) extern int i;

이렇게 선언을 하면, 컴파일러에게 변수 i는 외부에(다른 파일에) 선언되어 있음을 알려주는 것이다.

그래서 컴파일러는 그냥 컴파일을 한다.


※ 외부(다른 파일)에 정의된 함수를 호출하기 위해서 함수를 선언할 때 extern이라는 키워드를 반드시 써야 하는 것은 아니다.

왜냐하면, 함수 선언 자체가 extern의 의미를 포함하고 있기 때문이다.


ex) extern double add(double a, double b);

               double add(double a, double b);  // 이 둘은 같은 의미이다.


그러나, extern이라는 키워드를 붙여 주는 것이 나쁘지는 않다. 왜냐하면 함수의 정의가 외부에 존재한다는 의미를 부여할 수 있기 때문이다.




외부 접근 금지: 전역 변수 선언시, 키워드 static의 의미. 

:전역 변수로 변수 앞에 static 선언을 하면 외부의 접근을 금지한다는 뜻이 된다.(정확히는 변수의 접근 영역을 파일로 제한한다는 뜻.)

ex) static int a;  ←   extern int a; 접근 불가!!!

     int a;  ←   extern int a; 접근 가능!!!




링크(Link)에 대한 이해

: 컴파일을 하면 오브젝트 파일이 생긴다.(obj파일은 단지 기계어로 변환된 내용만을 지닌 파일이다.)

만약, 모듈화 프로그래밍을 해서 두개의 파일이 있다면 두개의 obj파일이 생성되어있을것이다.

링크는 이 파일 두개를 서로 연결시켜주는 작업을 한다. 그래서 하나의 완성된 실행 파일을 생성한다.


: 최종적인 실행 파일의 생성을 위해서 접근하는 변수가 어디에 존재하는지, 호출하는 함수가 어디에 존재하는지 

연결해 주는 작업을 가리켜 링크라 한다.




헤더파일(Header File)의 구현과 유용성

: ANSI 표준에서 정의하고 있는 헤더 파일을 "표준 헤더 파일"이라 한다.

이러한 헤더 파일들을 모아놓은 곳이 "표준 디렉토리"라고 한다.


: 확장자가 .h로 끝나는 파일을 헤더 파일이라고 한다. 헤더 파일은 #include 전처리기 지시자에 의해서 다른 파일 내에 포함된다.


※ 일반적으로 함수의 정의를 헤더 파일에 포함시키지는 않는다. 선언만 헤더 파일에 포함한다.




- 헤더 파일을 포함하는 두 가지 방법 -


ex) #include <abc.h>                  // 표준 디렉토리에서 abc.h를 찾아서 포함.

     #include "c:/include/abc.h"    // c:/include 에서 abc.h를 찾아서 포함.

     #include "/include/lib/plus.h" // /include/lib/plus.h에 존재하는 plus.h 포함.(유닉스 계열 컴퓨터)


 < >를 이용한 헤더 파일의 포함.

: 표준 디렉토리는 컴파일러마다 유지하고 있는 위치가 다르다.

: 표준 디렉토리에 존재하는 헤더 파일을 포함하기 위해서는 < >를 사용한다.


 " "를 이용한 헤더 파일의 포함.

: " "를 이용해서 헤더 파일을 포함할 경우 헤더 파일이 존재하는 디렉트로의 위치를 직접 지정하는 것이 가능하다.

: 보통 사용자가 정의하는 헤더 파일은 위치를  정해서 따로 관리하기 마련인데, 이렇게 임의의 위치에 존재하는

헤더 파일을 포함하는 경우, 다시 말하면 사용자가 정의하는 헤더 파일을 포함하는 경우 " "를 이용하게 된다.



※ main 함수를 지니고 있는 파일을 메인 모듈(main module)이라 한다.





여기서는 file.c라는 파일을 만들어 함수의 "정의"를 해두었다. 

그리고 메인 모듈로 가선 함수의 "선언"을 해주었다.


자 그런데.. 만약 저 함수들의 인자받는 것이 바뀐다면... 이를테면 void 형으로 바뀐다면...


메인모듈의 있는 함수 원형 선언문 모두를 void로 바꾸어야 한다.

지금은 4개밖에 없지만.. 저것이 10~20개면.. 그리고 다른 파일들도 저 선언을 가지고 있다면..

파일을 돌아다니며 다 바꿔주어야 한다. 참 귀찮을 것이다.


그런데, 헤더파일을 만들어서 거기에 함수 원형을 선언하고 메인 모듈이나 다른 파일들이 #include하는 식이라면...

헤더파일에 있는 함수 선언만 바꿔주면 끝이다.





이러한 번거로운 일들을 편히 하기 위해서 헤더 파일이라는 것을 만든다.


'Programming > C' 카테고리의 다른 글

fprintf와 문자열 형식  (0) 2013.02.15
조건부 컴파일  (0) 2013.02.15
전처리기 (Pre-Processor)  (0) 2013.02.15
C언어에서의 Token  (0) 2013.02.15
메모리 관리와 동적 할당  (0) 2013.02.15
Posted by scii
: