더듬이의 헬로월드

Hello, World!

프로그래밍 언어/C++ [기본]

[C++기본] 12.분할 구현과 문제점

더듬이 2021. 8. 26. 18:36
728x90

분할 구현은 함수의 원형, 함수 내용, 프로그램 메인 등 다양하게 역할을 나누어서 코드를 효율적으로 관리할 수 있게 해준다.

근데 왜 함수 원형을 적은 헤더파일과 내용을 적은 파일을 분리해야 할까?
그렇게 하지 않는다면 무슨 문제가 생길까?

중복 정의와 비효율성의 문제점

void Test(){
cout<<"Test1"<<endl;
}

void Test(){
cout<<"Test2"<<endl;
}

만일 내가 Test()라는 함수를 호출한다면, 어떤 함수가 실행이 될까?

같은 이름의 함수는 하나밖에 존재 할 수밖에 없다.

또한, 헤더 부분에 내용까지 구현을 해버리면 그 헤더를 포함하고 있는 파일들은 모두 같은 내용의 코드들을 비효율적으로 포함하게 된다.

그럼 위 문제와 같지 않은가? 같은 이름의 함수가 여러개가 들어가 버리기 때문에 오류가 나게 된다.

그러기 때문에 헤더 파일에서는 선언만 해주는 것이다.

이러면 어떤 코드 파일에서 호출해도, 링크는 하나만 되기 때문에, 함수 내용과 선언 부분을

나누어주는 것이다.


분할 컴파일과 전역 변수

분할 컴파일은 코드관리 부분에 대해서 어마어마한 장점이 있지만, 전역변수를 활용하기 힘들어진다.

헤더와 파일들이 나눠져있기 때문에 코드가 전부 컴파일이 되기 전에는 전역변수의 존재를 모른다!
그래서 코드 작성 과정에서는 전역변수를 활용하기 힘들어지는 것이다.


헤더 파일에 변수를 선언하면 전역 변수로 이용할 수 있지 않을까?

일단 #include가 무슨 역할을 하는지 알아보자.

#include의 역할은 그저 복사 붙혀넣기 이다.

헤더의 코드들을 그대로 가져오는 것 이외의 역할은 하지 않는다.

아까 함수의 경우와 마찬가지이다. 헤더에 변수를 선언해버리면 결국 모든 파일이 한 프로그램으로 합쳐지며 같은 이름의 전역변수가 여러개 나오게 된다.

그럼 컴파일 과정이 끝나고 링크 과정에서 여러 개의 같은 이름의 변수로 인해 중복성의 문제가 발생된다!!

728x90