C언어 vs C++
C언어에서는 입출력을 할 때, printf / scanf 함수를 사용하고 이러한 함수를 사용할 수 있도록 하는 라이브러리는 <stdio.h>였습니다.
이런 식이였죠. 코드를 보면 형식지정자도 사용해야합니다.
하지만 C++ 코드를 보면!
이런 식입니다.
yes~ 이제 C++에서는 iostream이 우리가 알던 stdio.h를 대신하는 헤더파일입니다. 의미는 input/output 스트림입니다. stdio에서 io역시 input/output이였죠.
yes~ std는 'standard'의 약자입니다. 가장 대표적인 '이름공간(namespace)'입니다.
다만, 이 이름공간을 설명하기 전에 우리는 오버로딩(OverLoading)이라는 개념을 알아야합니다.
이름부터 좀 무서운데요?
C언어에서 확장된 개념입니다. C언어에서 우리는 사용자 정의 함수를 구현할 때, 대충 코드를 이런 식으로 짰습니다.
#include <stdio.h>
int sum (int a, int b)
{
printf("%d",a+b);
return 0;
}
int minus (int a, int b)
{
printf("%d",a-b);
return 0;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
sum(a,b);
printf("\n");
minus(a,b);
return 0;
}
이런 식으로 함수명을 sum, minus로 두었습니다. 근데, 만약 함수명이 같다면요? 직관적으로 봐도 허용이 되지 않음을 파악하셨을겁니다. 맞아요.
바로 breakpoint가 걸립니다.
근데, C++에서는 이걸 허용해줍니다. 이러한 개념을 함수의 오버로딩이라 합니다. C++로 넘어가서 코드를 다시 짜보겠습니다.
보시면 sum으로 동일한 함수가 2개 선언되었는데 문제없이 컴파일되고 출력도 정상적으로 됩니다. 어떻게 판단하는 것일까요?
매개변수가 다르다면 문제가 없다는 것입니다.
즉, 정수형 / 실수형 / 문자형 / void형 으로 구분을 해서 함수를 호출한다는 것입니다.
가능합니다. 이걸 가능케하는게 바로 이름공간입니다. 코드부터 소개하겠습니다.
#include <iostream>
namespace Crush
{
void Func();
}
namespace Study
{
void Func();
}
void Crush::Func()
{
std::cout << "안녕? 나는 Crush" << std::endl;
}
void Study::Func()
{
std::cout << "안녕? 나는 Study" << std::endl;
}
int main()
{
Crush::Func();
Study::Func();
return 0;
}
이름공간을 사용할 건데 어떤 이름을 줄거냐? 그래서 저는 Crush라는 이름공간 / Study라는 이름공간을 정의했습니다.
이 이름공간 내에서 이제 저는 Func라는 함수를 정의할 것입니다.
그리고 둘다 매개변수는 주지 않겠습니다. 이렇게 되면 원래대로면
이렇게 breakpoint가 걸려야 합니다. 하지만?
이름공간을 사용했더니 그렇지가 않죠.
예시를 들면, 임직원조회를 해보면요. 저희 회사에는 저랑 동명이인이신 사원분이 한분 계십니다. 근데 저희 둘을 구분지을 방법은 바로 부서입니다.
동명이인이지만 부서가 달라서 구분이 가능합니다.
이것도 실생활에서의 이름공간이라 볼 수 있습니다.
제조 조직의 Crush님.
CTO조직의 Crush님. 이렇게 구분이 가능하죠.
이제 이 포스팅의 마지막 글을 봅시다.
우리가 C++에서 입출력을 할 때 항상 std::cout / std::cin 같이 std라는 것을 항상 참조했습니다.
여기서 ::는 "이름공간을 참조한다" 라는 뜻입니다.
아무튼, 입출력을 쓸 때마다 항상 std::를 기재해주는게 여간 귀찮은게 아닙니다.
그래서 등장한게 using 개념입니다. using을 어떻게 사용하느냐?
전역변수로 std라고 정의된 이름공간을 '사용 중' 으로 하면 이제 이 프로그램은 종료되기 전까진 std::를 명시하지 않아도 됩니다.
C언어의 \n과 같다!
코드를 보면 cout은 출력 cin은 입력을 의미하는 것을 알 수 있었습니다.
근데 endl? 이건 쓸때도 있고 안쓸때도 있는데 뭔가요?