2-2-나.프로젝트

비주얼 C++은 교육용 컴파일러가 아닌 실무용 컴파일러이기 때문에 실제 개발 업무에 편리한 기능을 많이 제공한다. 그 중의 하나가 프로젝트 기능인데 프로젝트란 무엇인지 알아보도록 하자. First예제의 경우 프로그램의 실체인 코드는 First.cpp 파일에 모두 작성되어 있는데 이 소스를 만들기 전에 프로젝트를 반드시 먼저 만들어야 했다. 소스 파일만 입력해서 바로 컴파일할 수 있다면 편리하겠지만(실제로 터보 C 2.0은 단일 소스로 컴파일 가능하다) 매번 프로젝트를 구성해야 하기 때문에 다소 번거로운 면이 있다.

프로젝트는 하나의 실행 파일을 제작하는데 필요한 관련 파일의 집합이다. 예를 들어 게임을 개발한다고 해 보자. 게임을 만들기 위해서는 코드를 담는 소스 파일 외에도 그림 파일이나 소리 파일, 아이콘, 폰트, 데이터 파일 등 많은 것들이 필요하다. 또한 개발의 효율 향상을 위해 소스도 기능별로 그래픽, 사운드, 점수 관리, 게임 진행 등으로 나누어 여러 개를 포함시킬 수 있다. 이런 것들을 하나의 이름하에 묶어 놓은 것을 프로젝트라고 한다.

실행 파일 하나를 만들기 위해 필요한 모든 구성 파일을 하나의 프로젝트에 포함시켜 두면 이 파일들을 관리하기에 편리하다. 프로젝트는 보통 한 디렉토리에 저장되므로 프로젝트의 위치를 통째로 옮기거나 백업본을 만들기 좋다. 예를 들어 누군가가 이 예제를 달라고 한다면 프로젝트 디렉토리만 압축해서 전달하면 된다. 그래서 비주얼 C++은 아무리 간단한 예제라 하더라도 프로젝트를 먼저 만들도록 되어 있다.

비주얼 C++은 프로젝트보다 더 상위의 개념인 솔루션(Solution)까지 지원한다. 솔루션(비주얼 C++ 6.0에서는 워크 스페이스)이란 여러 개의 프로젝트를 모아 놓은 것이다. 프로젝트는 실행 파일 하나를 만들기 위한 구성 파일의 집합이며 이런 프로젝트 여러 개가 모여 하나의 솔루션을 구성한다. 보통 한 제품은 여러 개의 실행 파일로 구성되므로 솔루션은 제품 하나라고 할 수 있다.

예를 들어 비디오 대여점 관리 패키지를 개발한다고 해 보자. 이 패키지에는 비디오 관리뿐만 아니라 사용자 관리, 대여 관리 등의 각각 다른 실행 파일이 있을 것이고 통계 프로그램, 고객 성향 분석 프로그램 등이 더 있을 수도 있다. 이런 각각의 프로젝트를 하나로 묶어 놓은 것이 바로 솔루션이다. 상용 제품중에 오피스가 솔루션의 좋은 예인데 이 패키지를 설치하면 워드 프로세서인 워드뿐만 아니라 엑셀, 파워 포인트 등등도 같이 설치된다.

비주얼 C++로 프로젝트를 하나 생성하면 같은 이름의 솔루션을 만들고 그 안에 프로젝트를 생성하여 포함시킨다. 기본적으로 솔루션 하나에 프로젝트 하나가 있지만 여러 개의 프로젝트를 솔루션에 새로 만들어 넣을 수도 있다. 결국 앞에서 만들었던 First 예제는 다음과 같이 구성되어 있는 것이다. 이런 구성은 파일 뷰에서 확인할 수 있다.

First 솔루션 안에 First 프로젝트가 있고 이 프로젝트 안에 실제 코드를 가지는 First.cpp가 있다. 솔루션 파일은 확장자 sln(6.0에서는 dsw)을 가지며 프로젝트 파일은 확장자 vcproj(6.0에서는 dsp)를 가진다. 탐색기에서 First 디렉토리를 확인해 보면 이런 파일들이 생성되어 있을 것이다. 물론 First 솔루션 안에 Second 프로젝트를 추가할 수 있고 First 프로젝트안에 Second.cpp, Third.cpp도 마음대로 추가할 수 있다. 이 책의 예제 쉘 프로그램인 HycExam 솔루션을 열어 보면 이런 구성을 확인해 볼 수 있는데 구현하는 기능별로 아주 많은 소스 파일이 포함되어 있다. 단일 소스로는 이런 복잡한 프로그램을 만들기 어렵다.

비주얼 C++로 만든 프로젝트의 실체는 확장자 cpp를 가지는 소스 파일이 아니라 확장자 sln이나 dsw를 가지는 솔루션 파일인 것이다. 만약 First 예제를 저장해 두었다가 다시 열려면 First.cpp를 여는 것이 아니라 First.sln(6.0에서는 First.dsw)를 열어야 한다. 또한 인터넷이나 뉴스 그룹에서 쓸만한 예제를 다운로드 받았을 때도 sln 파일을 열어야 이 솔루션안의 코드 전체를 살펴 볼 수 있고 컴파일도 할 수 있다.

솔루션은 프로젝트보다는 더 상위의 개념이지만 이 책에서는 관습적으로 솔루션이라는 용어 대신 프로젝트라는 용어를 사용할 것이다. 즉 First 솔루션이라고 부르지 않고 First 프로젝트라고 부른다. 프로젝트라는 용어가 더 일반적인데다 다른 컴파일러들은 솔루션의 개념이 없기 때문이다. 솔루션이란 대규모의 패키지를 만들 때나 쓰는 것이지 예제 수준에서는 거의 솔루션을 구성할 경우가 없다.

앞으로 문법 공부를 하자면 수많은 예제들을 만들어 보고 실습해 볼 것이다. 그러자면 새로운 실습을 할 때마다 매번 프로젝트를 만들어야 하는데 사실 이는 무척이나 번거로운 일이다. 고작 10줄 정도되는 소스를 입력해 보기 위해 마법사를 실행하고 옵션 선택하고 구성 파일을 생성해야 하는 것이다. 게다가 매 프로젝트마다 새로운 이름을 붙이는 것도 보통 성가신 일이 아니다.

하지만 몇 번 하다 보면 요령이 생기는데 매번 프로젝트를 만들 필요없이 하나만 만들어 놓고 소스만 계속 바꿔가며 실습을 진행할 수도 있다. 예를 들어 CExam, MyStudy, Dummy 같은 이름으로 프로젝트를 하나 만들어 놓고 소스만 계속 바꾸면 된다. 아니면 아예 이미 만들어 놓은 First 프로젝트를 계속 쓸 수도 있다. 어차피 프로젝트란 소스를 담기 위한 껍데기에 불과하므로 실습중에는 이런 방법을 쓰는 것이 오히려 더 편리하다.

배포 파일인 CExam.zip에는 이런 목적으로 CExam이라는 이름의 더미 프로젝트가 제공되며 이 프로젝트는 비주얼 C++ 6.0, 7.0, Dev-C++에서 모두 사용할 수 있도록 설정되어 있다. 이후 실습에는 이 프로젝트를 열어 놓고 CExam.cpp의 소스만 바꿔 가며 컴파일해 보기 바란다.