신입 게임 개발자의 프로그래밍 일기

C++ 책 예시 타이핑시 괜찮다고 생각되는 방식 본문

Personal Writing

C++ 책 예시 타이핑시 괜찮다고 생각되는 방식

KFGD 2019. 3. 5. 20:14

전역이 얼마남지 않은 시점에...

정말 오랜만에 Visual Studio를 켰습니다.

기본서부터 다시 보자는 의미로 책의 예시 코드들을 타이핑하던 중, 괜찮은 방식이 떠올라서 적어놓습니다.

이 방식은 하나의 프로젝트에 책의 모든 예시코드를 작성하고픈 저와 같은 입문자들을 대상에게 추천합니다.


책에는 많은 예시코드들이 있습니다.

특히 언어 입문서들에는 짧은 예시코드들이 수두룩하며

저와 같은 입문자들 중 대다수가 아마 아래와 같은 방식들로 코드들을 작성해왔다고 생각합니다.


1. 대부분은 책에 있는 여러 소스코드들을 파일에 쓰고 지우고를 반복.

ㄴ이렇게 하면 나중에 주석과 코드를 다시 볼 수 없다는 점과 코드가 삭제되니 성취감 혹은 달성감이 생기지가 않았습니다.


2. 클래스로 예시코드들을 재구성하여 작성.

ㄴ클래스가 너무 많아집니다.. 클래스를 이런데 쓰라고 만든 개념이 아니고요.


3. IDE(ex. Visual Stuido)의 기능 활용

ㄴVisual Studio는 "프로젝트에서 제외"와 같은 기능을 통해 소스파일들을 빌드에서 제외시킬 수 있지만

   추후에 이것을 다시 포함시키기 위해서는 과정이 몇 단계 추가됨으로 귀찮습니다...

   그리고 잘못 건들면 파일들이 꼬이기도 합니다.(이거 제가 바보라서...)


등등


위와 같은 이유들로 개인적으로 판단하기에 C++의 namespace를 활용한 예시코드 작성 방식이 

책을 공부할 때 효율적이라고 생각합니다.

이 방법의 순서는 아래와 같습니다.


[방법]

1. 프로젝트를 생성합니다.

2. 책의 예시코드를 작성할 소스파일(Source.cpp)을 생성합니다.

3. 소스파일(Source.cpp)에 적절한 namespace를 정의하고 main함수와 예시코드들을 작성합니다.

4. 헤더파일(Header.hpp)을 생성하여 생성한 소스파일(Source.cpp)과 동일한 namespace를 정의하고 main함수 선언문을 작성합니다.

5. 프로젝트 생성과 동시에 생성된 main함수가 있는 소스파일(Main.cpp)에 생성한 헤더파일(Header.hpp)를 

   포함(#include <Header.hpp>)시킵니다.

6. Main.cpp 소스파일의 main함수에서 Header.hpp 헤더파일에 선언된 main함수를 호출합니다.


최종적으로 생성되는 파일은 총 3가지이며 아래와 비슷한 형태를 띄게 됩니다.


<Main.cpp>

- 프로젝트 생성시, global namespace의 main 함수가 존재하는 소스파일로 global namespace의 main함수는 하나만 존재할 수 있습니다.

- 책의 예시코드가 작성된 namespace의 main 함수를 호출하는 코드만 작성합니다.

/*
	Main.cpp
*/

#include "Header.hpp"
#include <iostream>

int main()
{
	NameSpace::main();

	return 0;
}


<Header.hpp>

- 책의 예시코드들이 작성된 namespace들의 main 함수의 선언문을 작성하는 헤더파일입니다.

/*
	Header.hpp
*/

namespace NameSpace {
	int main();
}


<Source.hpp>

- 책의 예시코드를 작성한 소스파일입니다.

- namespace를 정의함으로서 별도의 논리적 공간을 생성하여 책에 작성된 main 함수를 포함한 여러 예시코드들을 

   그대로 작성할 수 있습니다.

/*
	Source.cpp
*/

#include <iostream>

namespace NameSpace {
	using std::cout;
	using std::endl;

	void Example1() {
		cout << "Hello World_1!" << endl;
	}

	void Example2() {
		cout << "Hello World_2!" << endl;
	}

	int main() {
		Example1();
		Example2();
		return 0;
	}
}

이렇게 하면 예시코드별로 namespace를 정의하고 작성 및 헤더파일에 namespace 별로 main 함수 선언문 작성

그리고 global namespace의 main함수에서 다른 namespace의 main함수를 호출해야 한다는 세가지 단계가 추가되지만,

하나의 프로젝트에서 책에 기재된 예시코드들을 거의 그대로 전부 작성할 수 있다고 생각합니다.


이제 다시 공부하러 가봐야겠습니다.

혹여 이 방식에 문제점이나 더 좋은 방식이 있다면 알려주시면 감사하겠습니다.

'Personal Writing' 카테고리의 다른 글

신년사 및 2018년 목표  (2) 2018.01.03
Comments