본 내용은 어소트락 무료 강의 <C/C++ 무료강의>을 기반으로 공부한 내용을 정리한 것이다. 틀린 내용이 있을 수도 있음.

분할 구현

Header 파일(파일명.h)과 Cpp 파일(파일명.cpp)를 분리하여 각각에 구현하는 것

분할 구현 순서

  1. Header 파일을 추가하고 원하는 함수를 “선언”만 하기

// func.h 파일 내 코드
#Pragma once        // Header 파일이 중복 선언되지 않게하는 전처리기

int Add(int a, int b)      // 덧셈 함수
int Sub(int a, int b)      // 뺄셈 함수
int Mul(int a, int b)      // 곱셈 함수

  1. Header 파일에서 “선언”만 했던 함수를 Cpp 파일에서 “구현”

// func.cpp 파일 내 코드
#include "func.h"          // #include 전처리기로 Header 파일 불러오기

int Add(int a, int b)      // Cpp 파일에서 Header파일의 "선언"만 되었던 함수를 "구현"
{                          // 이 과정이 우리가 여태 한 파일에서 맨 앞 코드에서 함수를 선언하고 구현했던 것과 같다.         
    return a + b;
}

int Sub(int a, int b)      // Cpp 파일에서 Header파일의 "선언"만 되었던 함수를 "구현"
{
    return a - b;
}

int Mul(int a, int b)      // Cpp 파일에서 Header파일의 "선언"만 되었던 함수를 "구현" 
{
    return a * b;
}

  1. 이제 원하는 함수를 사용해야 하는 Main 파일에서 함수 사용가능 ```cpp int main() { int Data1 = Add(10,20); int Data2 = Sub(10,20); int Data3 = Mul(10,20);

    return 0;

} ```

함수의 선언과 구현을 분리하여 저장 -> 저장된 함수명만 Main 파일에서 사용한다.

분할 구현의 원리

  1. Header 파일에서 함수 선언

  2. Cpp 파일에서 함수 구현

  3. Main 파일에서 함수를 호출 -> 문법적으로 오류는 없기에 컴파일에러는 발생 X, 그러나 호출당한 함수가 존재하지 않는다면 링크 에러 발생

  4. 호출당한 함수가 어딘가에 구현되어 있어야 함. 구현되는 곳은 어느곳이든 상관없이 존재하기만 하면됨. 그래야 링크단계에서 합쳐질 수 있다.

  5. 호출당한 함수를 찾아내면 링크단계에서 파일들이 합쳐져 프로그램 실행을 위한 .exe 파일이 되어 실행됨.

분할 구현의 장점

  • 관련함수를 카테고리 별로 구현만 해놓고 해당 파일만 전처리기를 통해 참고하면 함수를 사용 가능.

  • 코드 관리가 용이하다. 만약 분할 구현을 하지 않고 한 파일에 함수 선언, 구현을 모두 담는다면 관리가 힘들다.

분할 구현의 문제점

그러면 Header 파일에 선언하고 구현까지 동시에 해버리면 안될까? -> 안됨 여러개의 Cpp 파일에서 전처리기 #include를 통해 함수가 복/붙이 되면 컴파일 이후 링크단계에서 exe파일로 합쳐졌을 떄 함수가 중복되어 오류가 발생

전역변수도 동일하다. 메인함수 내의 전역변수를 사용해서 전체 코드를 구현하면 전역변수를 컴파일러가 확인하고 사용할 수 있지만 다른 파일에서 해당 전역변수를 인식하지 못함. exe파일로 합쳐지면 데이터 영역에는 해당 전역변수가 존재한다. 즉, 내가 선언한 전역변수를 다른 쪽 파일에서 문법적으로 인식시키가 어렵다.

해결법이 있다?

만약 헤더파일에 전역변수를 지정한다면? 이는 함수의 중복과 동일하게 전역변수의 중복이 발생 데이터 영역 내에서 전역변수가 중복된다면 호출 시 어떤 전역변수를 해야 할 지 모른다.

이를 해결하기 위한 개념이 바로 정적변수와 외부변수이다.