- ์ฐธ๊ณ ํ๋ฉด ์ข์ ์๋ฃ
์์ ๋ฅผ ํตํด์ ํ์ธํ ์ฌ์ค ๋ช ๊ฐ์ง
- ํค๋ํ์ผ์ ์ ์ธ -
#include <iostream>
- ์ถ๋ ฅ์ ๊ธฐ๋ณธ๊ตฌ์ฑ -
std::cout<<"์ถ๋ ฅ๋์1"<<"์ถ๋ ฅ๋์2";
- ๊ฐํ์ ์งํ -
std::endl
#include <iostream>
int main(void)
{
int num=20;
std::cout<<"Hello World!"<<std::endl;
return 0;
}
- ์
๋ ฅ์ ๊ธฐ๋ณธ๊ตฌ์ฑ -
std::cin>>๋ณ์
- ๋ณ์์ ์ ์ธ์์น - ํจ์์ ์ค๊ฐ ๋ถ๋ถ์์๋ ๋ณ์์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
std::cin>>val1>>val2;
์ด๋ ๋ฏ ์ฐ์ด์ ๋ฐ์ดํฐ์ ์
๋ ฅ์ ๋ช
๋ นํ ์ ์๋ค. std::cin
์ ํตํด์ ์
๋ ฅ๋๋ ๋ฐ์ดํฐ์ ๊ตฌ๋ถ์ ์คํ์ด์ค ๋ฐ, ์ํฐ, ํญ๊ณผ ๊ฐ์ ๊ณต๋ฐฑ์ ํตํด์ ์ด๋ค์ง๋ค.
#include <iostream>
int main(void)
{
char name[100];
std::cout<<"What's your name?";
std::cin>>name;
std::cout<<"Your name is "<<name<<".\n";
return 0;
}
๋ฌธ์์ด์ ์ ๋ ฅ๋ฐฉ์๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ ๋ ฅ๋ฐฉ์๊ณผ ํฐ ์ฐจ์ด๊ฐ ๋์ง ์๋๋ค.
int MyFunc(int num)
{
num++;
return num;
}
int MyFunc(int a, int b)
{
return a + b;
}
int main(void)
{
MyFunc(20); // MyFunc(int num) ํจ์์ ํธ์ถ
MyFunc(30, 40); // MyFunc(int a, int b) ํจ์์ ํธ์ถ
return 0;
}
C++์ ํจ์ํธ์ถ ์ โํจ์์ ์ด๋ฆโ๊ณผ โ์ ๋ฌ๋๋ ์ธ์์ ์ ๋ณดโ๋ฅผ ๋์์ ์ฐธ์กฐํ์ฌ ํธ์ถํ ํจ์๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ฐ๋ผ์ ์ด๋ ๋ฏ ๋งค๊ฐ๋ณ์์ ์ ์ธ์ด ๋ค๋ฅด๋ค๋ฉด ๋์ผํ ์ด๋ฆ์ ํจ์๋ ์ ์ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ํํ์ ํจ์ ์ ์๋ฅผ ๊ฐ๋ฆฌ์ผ โํจ์ ์ค๋ฒ๋ก๋ฉ(Function Overloading)โ์ด๋ผ ํ๋ค.
int MyFunc(char c) {...}
int MyFunc(int n) {...}
-> ๋งค๊ฐ๋ณ์์ ์๋ฃํ์ด ๋ค๋ฅด๋ฏ๋ก ํจ์ ์ค๋ฒ๋ก๋ฉ ์ฑ๋ฆฝ
int MyFunc(int n) {...}
int MyFunc(int n1, int n2) {...}
-> ๋งค๊ฐ๋ณ์์ ์๊ฐ ๋ค๋ฅด๋ฏ๋ก ํจ์ ์ค๋ฒ๋ก๋ฉ ์ฑ๋ฆฝ
void MyFunc(int n) {...}
int MyFunc(int n) {...}
-> ๋ฐํํ์ ์ฐจ์ด๋ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ์กฐ๊ฑด์ ๋ง์กฑ์ํค์ง ์๋๋ค.
int MyFuncOne(int num=7) { return num+1; }
-> ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด 7์ด ์ ๋ฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค. ์ฌ๊ธฐ์์ ๋ํดํธ ๊ฐ์ 7
๋ฐ๋ผ์ ์ด ํจ์๋ฅผ ๋์์ผ๋ก ํ๋ ๋ค์ ๋ ํจ ์์ ํธ์ถ์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.
MyFuncOne( ); MyFuncOne(7);
int MyFuncTwo(int num1=5; int num2=7) { return num1+num2; }
-> ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๊ฐ๊ฐ 5์ 7์ด ์ ๋ฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค. ๋ฐ๋ผ์ ์ด ํจ์๋ฅผ ๋์์ผ๋ก ํ๋ ๋ค์ ๋ ํจ์์ ํธ์ถ์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.
MyFuncTwo( ); MyFuncTwo(5, 7);
int YourFunc(int num1, int num2=5, int num3=7) { ... }
YourFunc(10); // YourFunc(10,5,7)
YourFunc(10, 20); // YourFunc(10,20,7)
-> ๋งค๊ฐ๋ณ์์ ์ผ๋ถ์๋ง ๋ํดํธ ๊ฐ์ ์ง์ ํ๊ณ , ์ฑ์์ง์ง ์์ ๋งค๊ฐ๋ณ์์๋ง ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
int YourFunc(int num1, int num2, int num3=30) {...} // (O)
int YourFunc(int num1, int num2=20, int num3=30) {...} // (O)
int YourFunc(int num1=10, int num2=20, int num3=30) {...} // (O)
-> ์ ๋ฌ๋๋ ์ธ์๊ฐ ์ผ์ชฝ์์๋ถํฐ ์ฑ์์ง๋ฏ๋ก, ๋ํดํธ ๊ฐ์ ์ค๋ฅธ์ชฝ์์๋ถํฐ ์ฑ์์ ธ์ผ ํ๋ค.
int WrongFunc(int num1=10, int num2, int num3) { ... } // (X)
int WrongFunc(int num1=10, int num2=20, int num3) { ... } // (X)
-> ์ ๋ฌ๋๋ ์ธ์๊ฐ ์ผ์ชฝ์์๋ถํฐ ์ฑ์์ง๋ฏ๋ก, ์ค๋ฅธ์ชฝ์ด ๋น ์ํ๋ก ์ผ์ชฝ์ ๋งค๊ฐ๋ณ์์๋ง ์ผ๋ถ ์ฑ์์ง ๋ํดํธ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ์๋ฌ๋ฅผ ์ผ์ผํจ๋ค.
using namrspace std;
๋๋ฌด ๋น๋ฒํ using namrspace
์ ์ ์ธ์ ์ด๋ฆ์ ์ถฉ๋์ ๋ง๊ธฐ์ํ ์ด๋ฆ๊ณต๊ฐ์ ์ ์ธ์ ์๋ฏธ ์๊ฒ ๋ง๋ ๋ค. ๋ฐ๋ผ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ํ์๊ฐ ์๋ค!
int num1 = 2010; // ๋ณ์์ ์ ์ธ์ผ๋ก ์ธํด์ num1์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋๋ค.
int &num2 = num1; // ์ฐธ์กฐ์์ ์ ์ธ์ผ๋ก ์ธํด์ num1์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ num2๋ผ๋ ์ด๋ฆ์ด ์ถ๊ฐ๋ก ๋ถ๊ฒ ๋๋ค.
- ์ฐธ์กฐ์๋ ๊ธฐ์กด์ ์ ์ธ๋ ๋ณ์์ ๋ถ์ด๋ โ๋ณ์นญโ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์ฐธ์กฐ์๊ฐ ๋ง๋ค์ด์ง๋ฉด ์ด๋ ๋ณ์์ ์ด๋ฆ๊ณผ ์ฌ์ค์ ์ฐจ์ด๊ฐ ์๋ค.
- ์ฐธ์กฐ์์ ์์๋ ์ ํ์ด ์์ผ๋ฉฐ, ์ฐธ์กฐ์๋ฅผ ๋์์ผ๋ก ์ฐธ์กฐ์๋ฅผ ์ ์ธํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
int &ref=20; // (X) ์์ ๋์์ผ๋ก์ ์ฐธ์กฐ์ ์ ์ธ์ ๋ถ๊ฐ๋ฅํ๋ค.
int &ref; // (X) ์ฐธ์กฐ์๋ ์์ฑ๊ณผ ๋์์ ๋๊ตฐ๊ฐ๋ฅผ ์ฐธ์กฐํด์ผ ํ๋ค.
int &ref=NULL; // (X) ํฌ์ธํฐ์ฒ๋ผ NULL๋ก ์ด๊ธฐํํ๋ ๊ฒ๋ ๋ถ๊ฐ๋ฅํ๋ค.
์ ๋ฆฌํ๋ฉด, ์ฐธ์กฐ์๋ ์ ์ธ๊ณผ ๋์์ ๋๊ตฐ๊ฐ๋ฅผ ์ฐธ์กฐํด์ผ ํ๋๋ฐ, ๊ทธ ์ฐธ์กฐ์ ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์๊ฐ ๋์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐธ์กฐ์๋ ์ฐธ์กฐ์ ๋์์ ๋ณ๊ฒฝํ ์ ์๋ค.
int arr[3] = {1, 3, 5};
int &ref1 = arr[0];
int &ref2 = arr[1];
int &ref3 = arr[2];
cout<<ref1<<ref2<<ref3; // 135
๋ณ์์ ์ฑํฅ์ ์ง๋๋ ๋์์ด๋ผ๋ฉด ์ฐธ์กฐ์์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค. ๋ฐฐ์ด์ ์์ ์ญ์ ๋ณ์์ ์ฑํฅ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ์์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
void SwapByValue(int num1, int num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
} // Call-by-value
void SwapByPtr(int *ptr1, int *ptr2)
{
int temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
} // Call-by-pointer
void SwapByRef(int &ref1, int &ref2)
{
int temp = ref1;
ref1 = ref2;
ref2 = temp;
} // Call-by-reference
c
๋ฅผ ๋ํ๊ณ , .h
๋ฅผ ๋นผ๋ผ
#include <math.h>
to #include <cmath>
๋จผ์ cout ์์ ๋ถ์ด ์๋ std
์ ์ ์ฒด๋ถํฐ ์์๋ณด์. std ๋ C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ํจ์, ๊ฐ์ฒด ๋ฑ์ด ์ ์๋ ์ด๋ฆ ๊ณต๊ฐ(namespace) ์ด๋ค.
"ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ" ๋ "๊ฐ์ฒด" ๊ฐ ๋ฌด์์ธ์ง ์์ง ๋ชฐ๋ผ๋ ๊ด์ฐฎ๋ค. ๊ทธ๋ฅ ์ฝ๊ฒ ์๊ฐํ์๋ฉด stdio.h
๊ฐ C ์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฏ์ด iostream
๋ C++ ์์ ์ ๊ณตํ๋ ์ถ๋ ฅ์ ์ํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฆ ๊ณต๊ฐ์ด๋ ๊ฒ์ด ์ ํํ ๋ฌด์์ผ๊น? ์ด๋ฆ ๊ณต๊ฐ์ ๋ง๊ทธ๋๋ก ์ด๋ค ์ ์๋ ๊ฐ์ฒด์ ๋ํด ์ด๋ ์์์ธ์ง ์ง์ ํด์ฃผ๋ ๊ฒ๊ณผ ๋์ผํ๋ค.
์ฝ๋์ ํฌ๊ธฐ๊ฐ ๋์ด๋จ์ ๋ฐ๋ผ, ํน์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง๋ฉด์ ์ค๋ณต๋ ์ด๋ฆ์ ๊ฐ์ง ํจ์๋ค์ด ๋ง์์ง๋ค. ๋ฐ๋ผ์ C++ ์์๋ ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด, ๊ฐ์ ์ด๋ฆ์ด๋ผ๋, ์์๋ ์ด๋ฆ ๊ณต๊ฐ์ด ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ทจ๊ธํ๊ฒ ๋์๋ค.
์๋ฅผ ๋ค์ด์ ๊ฐ์ ์ฒ ์๋ผ๊ณ ํด๋, ์์ธ ์ฌ๋ ์ฒ ์์ ๋ถ์ฐ ์ฌ๋ ์ฒ ์์ ๋ค๋ฅด๋ฏ์ด ๋ง์ด๋ค.
std::cout
์์ ๊ฒฝ์ฐ std
๋ผ๋ ์ด๋ฆ ๊ณต๊ฐ์ ์ ์๋์ด ์๋ cout
์ ์๋ฏธํ๋ค. ๋ง์ฝ์ std::
์์ด ๊ทธ๋ฅ cout
์ด๋ผ๊ณ ํ๋ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ cout
์ ์ฐพ์ง ๋ชปํ๋ค. ์์ธ์ ์ฌ๋ ์ฒ ์์ธ์ง ๋ถ์ฐ์ ์ฌ๋ ์ฒ ์ ์ธ์ง ์ ๊ธธ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฆ ๊ณต๊ฐ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. ์๋ฅผ ๋ค์ด์ ๋ ํค๋ํ์ผ header1.h ์ header2.h ๋ฅผ ์๊ฐํด๋ณด์.
// header1.h ์ ๋ด์ฉ
namespace header1 {
int foo();
void bar();
}
// header2.h ์ ๋ด์ฉ
namespace header2 {
int foo();
void bar();
}
์ ์ฝ๋์์ header1 ์ ์๋ foo
๋ header1 ๋ผ๋ ์ด๋ฆ ๊ณต๊ฐ์ ์ด๊ณ ์๋ foo
๊ฐ ๋๊ณ , header2 ์ ์๋ foo
์ ๊ฒฝ์ฐ header2 ๋ผ๋ ์ด๋ฆ ๊ณต๊ฐ์ ์ด๊ณ ์๋ foo
๊ฐ ๋๋ค.
์๊ธฐ ์์ ์ด ํฌํจ๋์ด ์๋ ์ด๋ฆ ๊ณต๊ฐ ์์์๋ ๊ตณ์ด ์์ ์ด๋ฆ ๊ณต๊ฐ์ ๋ช ์ํ์ง ์๊ณ ์์ ๋กญ๊ฒ ๋ถ๋ฅผ ์ ์๋ค. ์๋ฅผ ๋ค์ด์
#include "header1.h"
namespace header1 {
int func() {
foo(); // ์์์ header1::foo() ๊ฐ ์คํ๋๋ค.
}
} // namespace header1
header1 ์ด๋ฆ ๊ณต๊ฐ์์์ foo
๋ฅผ ๋ถ๋ฅธ๋ค๋ฉด ์์์ header1::foo()
๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๊ณ ํด์ header1 ์ ์ด๋ฆ ๊ณต๊ฐ ์์์ header2 ์ foo
๋ฅผ ํธ์ถํ์ง ๋ชปํ๋ ๊ฒ์ ์๋๊ณ , ๊ฐ๋จํ๊ฒ ํธ์ถ ํ ์ ์๋ค.
#include "header1.h"
#include "header2.h"
namespace header1 {
int func() {
foo(); // ์์์ header1::foo() ๊ฐ ์คํ๋๋ค.
header2::foo(); // header2::foo() ๊ฐ ์คํ๋๋ค.
}
} // namespace header1
๋ฐ๋ฉด์ ์ด๋ ํ ์ด๋ฆ ๊ณต๊ฐ์๋ ์์๋์ง ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์๋์ ๊ฐ์ด ๋ช ์์ ์ผ๋ก ์ด๋ฆ ๊ณต๊ฐ์ ์ง์ ํด์ผ ํ๋ค.
#include "header1.h"
#include "header2.h"
int func() {
header1::foo(); // header1 ์ด๋ ์ด๋ฆ ๊ณต๊ฐ์ ์๋ foo ๋ฅผ ํธ์ถ
}
ํ์ง๋ง ๋ง์ผ ์ ๊ฐ์ foo
์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ๊ฒ ๋๋ ๊ฒฝ์ฐ ์์ ๋งค๋ฒ header1::
์ ๋ถ์ด๊ธฐ๊ฐ ์๋นํ ๊ท์ฐฎ์ ๊ฒ์ด๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด '๋๋ ์์ผ๋ก header1
์ด๋ ์ด๋ฆ ๊ณต๊ฐ์ ๋ค์ด์๋ foo
๋ง ์ธ๊ฑฐ๋ค!' ๋ผ๊ณ ์ ์ธํ ์ ์๋ค.
#include "header1.h"
#include "header2.h"
using header1::foo;
int main() {
foo(); // header1 ์ ์๋ ํจ์๋ฅผ ํธ์ถ
}
๋ฟ๋ง ์๋๋ผ, ๊ทธ๋ฅ ๊ธฐ๋ณธ์ ์ผ๋ก header1 ์ด๋ฆ ๊ณต๊ฐ์์ ์ ์๋ ๋ชจ๋ ๊ฒ๋ค์ header1::
์์ด ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด
#include "header1.h"
#include "header2.h"
using namespace header1;
int main() {
foo(); // header1 ์ ์๋ ํจ์๋ฅผ ํธ์ถ
bar(); // header1 ์ ์๋ ํจ์๋ฅผ ํธ์ถ
}
์์ ์์ ๊ฐ์ด using namespace header1 ๊ณผ ๊ฐ์ด ๋ช ์ํ๋ฉด ๋๋ค.
๋ฌผ๋ก ์ด ๊ฒฝ์ฐ ์ญ์ header2 ์ ์๋ ํจ์๋ฅผ ๋ชป ์ฌ์ฉํ๋ ๊ฒ์ ์๋๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋ช ์์ ์ผ๋ก ์จ์ฃผ๋ฉด ๋๋ค.
#include "header1.h"
#include "header2.h"
using namespace header1;
int main() {
header2::foo(); // header2 ์ ์๋ ํจ์๋ฅผ ํธ์ถ
foo(); // header1 ์ ์๋ ํจ์๋ฅผ ํธ์ถ
}
๊ทธ๋ ๋ค๋ฉด ๋ค์ ์๋ ์์ ๋ฅผ ์ดํด๋ณด์.
int main() {
std::cout << "Hello, World!!" << std::endl;
return 0;
}
์ฌ๊ธฐ์ cout
๊ณผ endl
์ ๋ชจ๋ iostream
ํค๋ํ์ผ์ std
๋ผ๋ ์ด๋ฆ ๊ณต๊ฐ์ ์ ์๋์ด ์๋ ๊ฒ๋ค์ด๋ค. std
๋ฅผ ๋ถ์ด๊ธฐ ๊ท์ฐฎ์ ์ฌ๋์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!!" << endl;
return 0;
}
๋ก ์จ๋ ๋๋ค.
์ฐธ๊ณ ๋ก using namespace std;
์ ๊ฐ์ด ์ด๋ ํ ์ด๋ฆ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋ค๋ผ๊ณ ์ ์ธํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค. ์๋ํ๋ฉด std
์ ์ด๋ฆ์ด ๊ฒน์น๋ ํจ์๋ฅผ ๋ง๋ค๊ฒ ๋๋ค๋ฉด, ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒ๋ค๊ฐ C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งค์ฐ ๋งค์ฐ ๊ฑฐ๋ํ๋ฏ๋ก, ์ ๋ง ์ ๋ง์ ํจ์๋ค์ด ์กด์ฌํ๊ณ ์๋ค. ์์นซ ์๋ชปํ๋ค๊ฐ ์ด๋ฆ์ ๊ฒน์น๊ฒ ์ฌ์ฉํ๋ค๋ฉด, ๊ณ ์น๋๋ผ ์๊ฐ์ ๋ง์ด ์ก์๋จน์ ๊ฒ์ด๋ค. ๊ฒ๋ค๊ฐ std
์๋ ๋งค๋ฒ ์ ๋ง์ ํจ์๋ค์ด ์๋กญ๊ฒ ์ถ๊ฐ๋๊ณ ์๊ธฐ ๋๋ฌธ์ C++ ๋ฒ์ ์ด ๋ฐ๋ ๋ ๋ง๋ค ๊ธฐ์กด์ ์ ์๋ํ๋ ์ฝ๋๊ฐ ์ด๋ฆ ์ถฉ๋๋ก ์ธํด ๋์ํ์ง ์๊ฒ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์ ๊ถ์ฅํ๋ ๋ฐฉ์์ using namespace std;
๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ง ์๊ณ , std::
๋ฅผ ์ง์ ์์ ๋ถ์ฌ์ "std
์ ์ด๋ฆ๊ณต๊ฐ์ ํจ์์ด๋ค" ๋ผ๊ณ ๋ช
์ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ๋ํ, ๋ณธ์ธ์ด ์์ฑํ๋ ์ฝ๋๋ ๋ณธ์ธ ๋ง์ ์ด๋ฆ ๊ณต๊ฐ์ ๋ฃ์ด์ ํน์ ๋ชจ๋ฅผ ์ด๋ฆ ์ถฉ๋๋ก ๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ทธ๋ ๋ค๋ฉด cout
์ ๋ฌด์์ผ๊น? ์ ํํ ๋ฌด์์ธ์ง ๋งํ์๋ฉด ostream
ํด๋์ค์ ๊ฐ์ฒด๋ก ํ์ค ์ถ๋ ฅ(C ์ธ์ด์์์ stdout
์ ๋์๋๋ค) ์ ๋ด๋นํ๊ณ ์๋ค.
์ ํํ ๋ฌด์จ ์๋ฏธ์ธ์ง๋ ๋ชฐ๋ผ๋, ๊ทธ๋ฅ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ค๋ ๊ฒ๋ง ์์๋๋ฉด ๋๋ค.
์ ๊น ์ง๊ณ ๋์ด๊ฐ์๋ฉด, C++ ์์๋ ์ฌ๋ฏธ์๊ฒ๋ ์ด๋ฆ ๊ณต๊ฐ์ ๊ตณ์ด ์ด๋ฆ์ ์ค์ ํ์ง ์์๋ ๋๋ค.
์ด ๊ฒฝ์ฐ ํด๋น ์ด๋ฆ ๊ณต๊ฐ์ ์ ์๋ ๊ฒ๋ค์ ํด๋น ํ์ผ ์์์๋ง ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ง์น static ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ธ๋ค.
#include <iostream>
namespace {
// ์ด ํจ์๋ ์ด ํ์ผ ์์์๋ง ์ฌ์ฉํ ์ ์๋ค.
// ์ด๋ ๋ง์น static int OnlyInThisFile() ๊ณผ ๋์ผํ๋ค.
int OnlyInThisFile() {}
// ์ด ๋ณ์ ์ญ์ static int x ์ ๋์ผํ๋ค.
int only_in_this_file = 0;
} // namespace
int main() {
OnlyInThisFile();
only_in_this_file = 3;
}
์๋ฅผ ๋ค์ด์ ์ ๊ฒฝ์ฐ OnlyInThisFile
ํจ์๋ only_in_this_file
๋ณ์๋ ํด๋น ํ์ผ ์์์๋ง ์ ๊ทผํ ์ ์๋ค. ํค๋ํ์ผ์ ํตํด์ ์ ํ์ผ์ ๋ฐ์๋ค ํ๋๋ผ๋ (๋ฌผ๋ก main ํจ์ ๋ถ๋ถ์ ๋ฌด์ํ๊ณ ), ์ ์ต๋ช
์ namespace ์์ ์ ์๋ ๋ชจ๋ ๊ฒ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.