C & C++/윤성우의 열혈 C++ 프로그래밍

[열혈 C++] 인라인 함수와 네임 스페이스

거북이 코딩 2023. 12. 14. 14:14

인라인 함수

 

 인라인 함수는 일반 함수에 비하여 실행속도에 이점이 있습니다.

#include <iostream>

int Square(int);

int main(void) {
	std::cout << Square(5);
}

inline int Square(int a) {
	return a * a;
}
25

 

 위 코드는 간단한 인라인 함수의 예시를 보여주고 있습니다. 인라인 함수를 정의하는 법은 기존 함수에 앞에 inline을 붙여주기만 하면 됩니다.

 

네임 스페이스

 

 동일한 이름의 함수가 여러 개 있을 때 함수끼리의 충돌을 방지하기 위해 함수가 위치하는 공간을 정해주어야 합니다. 이때 쓰이는 공간을 네임 스페이스라고 합니다.

#include <iostream>

namespace first {
	int Square(int);
}

namespace second {
	int Square(int);
}

int main(void) {
	std::cout << second::Square(5);
	return 0;
}

int first::Square(int a) {
	return a * a;
}

int second::Square(int a) {
	return a * a * a;
}
125

 

 네임 스페이스 안의 요소를 사용할 때는 "네임 스페이스::요소"의 형태로 사용해야 합니다. 메인함수에서 second::Square(5)를 호출하여 세제곱인 125가 출력됩니다.

 

네임 스페이스의 중첩과 별칭

 

네임 스페이스 안에 또 다른 네임 스페이스를 정의할 수 있습니다. 그리고 중첩된 요소를 사용할 때에는 first::second::num1과 같은 형태로 사용합니다. 만약 중첩이 여러 번 된 네임스페이스를 간단히 사용하고 싶다면, 별칭을 붙일 수 있습니다. namespace fst=first::second::third; 이렇게 선언하게 되면 가장 안쪽의 third 대신 fst로 대체할 수 있습니다.

#include <iostream>

namespace first {
	namespace second {
		namespace third {
			int Square(int);
		}
	}
}
namespace fst = first::second::third;


int main(void) {
	std::cout << fst::Square(5);
	return 0;
}

int fst::Square(int a) {
	return a * a;
}
25

 

using

 

 이제 cout,cin,endl을 사용할 때 왜 std::를 붙여야 하는지 알 수 있을 것입니다. 셋 모두 std라는 네임 스페이스 안에 있기 때문입니다. using을 사용하면 앞에 귀찮게 네임스페이스를 명시하지 않아도 됩니다. using std::cout;이라는 선언은 cout을 알아서 std에서 찾으라는 의미입니다. 그래서 using std::cout;  using std::cin;  using std::endl; 을 입력해주면 std::를 붙이지 않아도 됩니다. std안에 있는 모든 것에 대해 한번에 생략하는 방법도 있습니다. using namespace std;라고 선언하면 됩니다. 하지만 using선언을 할 때마다 이름충돌이 발생할 확률은 올라가기 때문에 적절한 using의 사용이 필요합니다.

 

#include <iostream>

using namespace std;

int main(void) {
	char ment[20];
	cout << "아무말이나 입력하세요"<<endl;
	cin >> ment;
	cout << ment << "(메아리)";
	return 0;
}
야호~!
야호~!(메아리)

 

3열의 'using namespace std;' 를 'using std::cout; using std::cin; using std::endl;' 세줄로 대체해도 같은 결과가 나옵니다.