오늘 배울 내용은 이름공간(namespace)입니다.
이러한 이름공간이 필요한 이유부터 말씀드리겠습니다. 프로그램이 커지면서 코드도 점점 복잡하면서 대형화 되어갑니다.
그러다보니 개발자들이 서로 다른 부분을 맡아서 개발하게 됩니다. 모듈화해서 어디는 다리 어디는 몸통 어디는 팔 어디는 머리, 이런식으로 개발해서
나중에 조립을 한 셈이죠. 이런 개발 방식에서 큰 문제점이 생깁니다. 바로 함수의 이름이 겹치는 겁니다.
함수 이름이 같다보니 계속 코드는 충돌이나고 그렇다고 이미 쓴 코드에서 누가 뭘 바꾸고 누구는 안바꾸고 이런 문제가 발생할 수 있어서
미연에 방지하기 위해 생긴 것이 바로 이름공간(namespace)입니다.
이러한 이름공간의 기본적인 원리는 마치 원산지를 지정한 것과 같은 원리입니다. 같은 함수이지만 이건 국내산 이건 미국산 이건 중국산 이런식으로 출처
를 말해주니 필요한 부분에 적절한 함수가 들어가게 해주는 셈이죠.
그럼 간단한 코드로 보겠습니다.
같은 이름의 함수 Origin을 써도 이름공간을 써서 함수를 호출하면
충돌 없이 실행됩니다.
또 하나 알아두셔야 하는게 계속 보이는 :: 입니다. 범위지정 연산자라고 부릅니다.
우리가 자주 쓰는 std::cout, cin, endl 같은 함수도 std라는 이름공간 안에 있는 함수랍니다. 뿐만 아니라 지역변수 값을 건드리지 않고 전역 변수를 수정할 수 있답니다. ex) ::val+= 5
함수는 선언과 정의를 분리해서 쓰는게 일반적입니다. 선언은 헤더파일에 정의는 소스파일에 저장하는게 일반적입니다. 이름공간도 전혀 다를게 없습니다.
이런식으로 사용합니다. 당연히 같은 이름공간에서 선언된 함수를 호출할때는 이름공간을 쓰지 않습니다.
그 다음으로 이름공간의 중첩에 대해 말씀드리겠습니다.
이 이름공간도 이름공간 안에 또 다른 이름공간을 쓸 쑤 있습니다.
코드로 설명드리겠습니다.
보시는 것처럼 Korea라는 이름공간안에 Origin이라는 이름공간이 중첩되서 사용되었습니다.
다만 이름공간 중첩을 너무 많이해서 길어지는 경우 별칭을 사용하여 간략하게 사용할 수 있습니다.
int main(void)
{
namespace KorOrigin Korea::Origin; //라고 별칭을 써준다면
KorOrigin::Rice();
return 0;
{
이렇게 간략하게 사용할 수 있습니다.
이제 이름공간의 특징들을 배웠으니 더 나아가 using을 배우겠습니다.
이름공간을 배우고 using을 배우는 이유는 같이 쓰면 더 효율적이기 때문입니다.
코드로 보시겠습니다.
2행에 using namespace std; 는 std 이름공간 지정을 생략하고 쓸 수 있다는 말입니다.
보시면 std::cout 하던것이 그냥 cout을 해도 전혀 오류가 나지 않습니다.
using을 쓰기 때문에 확 편해졌죠?
대신
위와 같은 상황이 발생할 수 있습니다 무분별한 using의 사용은 함수 이름에 대한 충돌이 발생하게 됩니다.
그러니 적절한 사용으로 최고의 효율을 내시기 바랍니다.
'알음알음-IT > 개발_기초_코딩_C++' 카테고리의 다른 글
C++ 공부하기 - 6.참조자와 함수 (0) | 2020.02.04 |
---|---|
C++ 공부하기 - 5.참조자(Reference) (0) | 2020.02.04 |
C++ 공부하기 - 3.인라인 함수 (0) | 2020.02.04 |
C++ 공부하기 - 2.함수의 오버로딩와 매개변수의 디폴트 값 (0) | 2020.02.04 |
C++ 공부하기 - 1.C++의 입출력 (0) | 2020.02.04 |