본문 바로가기
Language&Framework&Etc/C++

1-5 이름공간(namespace)에 대한 소개

by 머리올리자 2020. 11. 18.

등장 배경 : 프로그램들이 대형화 되면서 이름의 충돌문제 발생 (ex, 함수 이름 겹치는 것 등...)

namespace 기본 원리

 

만약

10호 사는 철수

18호 사는 철수

201호 사는 철수

있다고 가정해보자

 

동시에 같이 있는 상황에서 "철수야!" 라고 부르면 어떤 철수를 부르는지 알 수 없음

 

만약,


"201호 사는 철수야!" 라고 하면 대답 가능하다.

 

이름 충돌 예시

#include <iostream>

void simplefunc(void)
{
	std::cout << "company1이 정의한 함수" << std::endl;

}

void simplefunc(void)
{
	std::cout << "company2가 정의한 함수" << std::endl;

}

int main(void)
{
	simplefunc();
	return 0;
}

이 코드 실행시 아래와 같이 빌드 에러가 뜬다

 

이 문제를 해결하기 위해 namespace를 써본다

#include <iostream>

namespace lab1 // 이름공간 이름
{ // 이름공간 내부
	void simplefunc(void)
	{
		std::cout << "lab1이 정의한 함수" << std::endl;
	}
}

namespace lab2 // 이름공간 이름
{ // 이름공간 내부
	void simplefunc(void)
	{
		std::cout << "lab2이 정의한 함수" << std::endl;
	}
}


int main(void)
{
	lab1::simplefunc(); // 범위지정 연산자(scope resolution operator)
	lab2::simplefunc();
	return 0;
}
  • 위 보면 lab1과 lab2의 namespace를 이용해서 namespace안 function에 접근하는 것을 볼 수 있다.
  • 그렇다면 같은 이름을 가진 function이라도 정상 작동된다.

 

참고 : [윤성우 열혈 C++ 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.