728x90

๋ชฉ์ฐจ

  1. printf์™€ scanf๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ์ž…์ถœ๋ ฅ ๋ฐฉ์‹
  2. ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ(Function Overloading)
  3. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋””ํดํŠธ ๊ฐ’(Default Value)
  4. ์ธ๋ผ์ธ(inline) ํ•จ์ˆ˜
  5. ์ด๋ฆ„ ๊ณต๊ฐ„(namespace)์— ๋Œ€ํ•œ ์†Œ๊ฐœ

 

1. printf์™€ scanf๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ์ž…์ถœ๋ ฅ ๋ฐฉ์‹

[c++ ๋ฒ„์ „์˜ Hello World ์ถœ๋ ฅ ํ”„๋กœ๊ทธ๋žจ]

โ€ป ํ—ค๋” ํŒŒ์ผ์˜ ์„ ์–ธ: #include <iostream>

โ€ป ์ถœ๋ ฅ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ: std::cout<<'์ถœ๋ ฅ ๋Œ€์ƒ 1'<<'์ถœ๋ ฅ ๋Œ€์ƒ 2'<<'์ถœ๋ ฅ ๋Œ€์ƒ 3';

โ€ป ๊ฐœํ–‰: std::endl

 

→ C์–ธ์–ด์—์„œ๋Š” ์ถœ๋ ฅ์˜ ๋Œ€์ƒ์— ๋”ฐ๋ผ ์„œ์‹ ์ง€์ •์ด ๋‹ฌ๋ฆฌํ–ˆ์ง€๋งŒ, C++์—์„œ๋Š” ๊ทธ๋Ÿฌํ•œ ๊ณผ์ •์ด ๋ถˆํ•„์š”.

 

[scanf๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ž…๋ ฅ]

โ€ป ์ž…๋ ฅ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ: std::cin>>'๋ณ€์ˆ˜'

→ ํ•จ์ˆ˜์˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„์—์„œ๋„ ๋ณ€์ˆ˜์˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

#include <iostream>

int main(void) {
    int val1;
    std::cout<<"์ฒซ๋ฒˆ์งธ ์ˆซ์ž์ž…๋ ฅ: ";
    std::cin>>val1;

    int val2;
    std::cout<<"๋‘๋ฒˆ์งธ ์ˆซ์ž์ž…๋ ฅ: ";
    std::cin>>val2;

    int result=val1+val2;
    std::cout<<"๋ง์…ˆ๊ฒฐ๊ณผ: "<<result<<std::endl;
    return 0;
}
 

 

[C++์˜ ์ง€์—ญ๋ณ€์ˆ˜ ์„ ์–ธ]

#include <iostream>

int main(void) {
    int val1, val2;
    int result = 0;
    std::cout<<"๋‘ ๊ฐœ์˜ ์ˆซ์ž์ž…๋ ฅ: ";
    std::cin>>val1>>val2;

    if(val1<val2){
        for(int i=val1+1; i<val2; i++)
            result+=i;
    }
    else{
        for(int i=val2+1; i<val1; i++)
            result+=i;
    }
    std::cout<<"๋‘ ์ˆ˜ ์‚ฌ์ด์˜ ์ •์ˆ˜ ํ•ฉ: "<<result<<std::endl;
    return 0;
}
 
๋‘ ๊ฐœ์˜ ์ˆซ์ž์ž…๋ ฅ: 3 7
๋‘ ์ˆ˜ ์‚ฌ์ด์˜ ์ •์ˆ˜ ํ•ฉ: 15
 
  • for๋ฌธ ์•ˆ์—์„œ๋„ ๋ณ€์ˆ˜์˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • std::cin์„ ํ†ตํ•ด์„œ ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ๋ถ„์€ ์ŠคํŽ˜์ด์Šค ๋ฐ”, ์—”ํ„ฐ, ํƒญ๊ณผ ๊ฐ™์€ ๊ณต๋ฐฑ์„ ํ†ตํ•ด์„œ ์ด๋ค„์ง„๋‹ค.

 

[๋ฐฐ์—ด ๊ธฐ๋ฐ˜์˜ ๋ฌธ์ž์—ด ์ž…์ถœ๋ ฅ]

#include <iostream>

int main(void) {
    char name[100];
    char lang[200];

    std::cout<<"์ด๋ฆ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ";
    std::cin>>name;

    std::cout<<"์ข…์•„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”? ";
    std::cin>>lang;

    std::cout<<"๋‚ด ์ด๋ฆ„์€ "<<name<<"์ž…๋‹ˆ๋‹ค. \n";
    std::cout<<"์ œ์ผ ์ข‹์•„ํ•˜๋Š” ์–ธ์–ด๋Š” "<<lang<<"์ž…๋‹ˆ๋‹ค."<<std::endl;
    return 0;
}
 
์ด๋ฆ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์œ ๋นˆ
์ข‹์•„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”? C++
๋‚ด ์ด๋ฆ„์€ ์œ ๋นˆ์ž…๋‹ˆ๋‹ค.
์ œ์ผ ์ข‹์•„ํ•˜๋Š” ์–ธ์–ด๋Š” C++์ž…๋‹ˆ๋‹ค.
 
 

2. ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ(Function Overloading)

[ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ์ดํ•ด]

โ–ถ C++์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ 'ํ•จ์ˆ˜์˜ ์ด๋ฆ„'๊ณผ '์ „๋‹ฌ๋˜๋Š” ์ธ์ž์˜ ์ •๋ณด'๋ฅผ ๋™์‹œ์— ์ฐธ์กฐํ•˜์—ฌ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๊ฒฐ์ •

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์„ ์–ธ์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋„ ์ •์˜ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ํ˜•ํƒœ์˜ ํ•จ์ˆ˜ ์ •์˜ → ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ(Function Overloading)

#include <iostream>

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;
}
 

[ํ•จ์ˆ˜ ์˜ค๋ฒ„ ๋กœ๋”ฉ์˜ ์˜ˆ]

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){...}
 

→ ๋ฐ˜ํ™˜ํ˜•์˜ ์ฐจ์ด๋Š” ํ•จ์ˆ˜ ์˜ค๋ฒ„ ๋กœ๋”ฉ์˜ ์กฐ๊ฑด์„ ์„ฑ๋ฆฝ X


3. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋””ํดํŠธ ๊ฐ’

[๋งค๊ฐœ๋ณ€์ˆ˜์— ์„ค์ •ํ•˜๋Š” '๋””ํดํŠธ ๊ฐ’'์˜ ์˜๋ฏธ]

int MyFunc(int num=7){
    return num+1;
}
 

→ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด 7์ด ์ „๋‹ฌ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ์˜ ๋””ํดํŠธ ๊ฐ’์€ 7, ๋”ฐ๋ผ์„œ MyFunc();์™€ MyFunc(7)์˜ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค.

int MyFunc(int num1=5, int num2=7){
    return num1+num2;
}
 

→ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ๊ฐ 5์™€ 7์ด ์ „๋‹ฌ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

๋”ฐ๋ผ์„œ MyFunc();์™€ MyFunc(5,7)์˜ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค.

 

[๋””ํดํŠธ ๊ฐ’์€ ํ•จ์ˆ˜์˜ ์„ ์–ธ์—๋งŒ ์œ„์น˜]

#include <iostream>

int Adder(int num1=1, int num2=2);

int main(void) {
    std::cout<<Adder()<<std::endl;
    std::cout<<Adder(5)<<std::endl;
    std::cout<<Adder(3, 5)<<std::endl;
    return 0;
}

int Adder(int num1, int num2){
    return num1+num2;
}
 
3
7
8
 

โ€ป ํ•จ์ˆ˜์˜ ์„ ์–ธ์„ ๋ณ„๋กœ๋„ ๋‘˜ ๋•Œ์—๋Š” ๋””ํดํŠธ ๊ฐ’์˜ ์„ ์–ธ์„ ํ•จ์ˆ˜์˜ ์„ ์–ธ๋ถ€์— ์œ„์น˜์‹œ์ผœ์•ผ ํ•œ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•จ์ˆ˜์˜ ๋””ํดํŠธ ๊ฐ’์˜ ์ง€์ • ์—ฌ๋ถ€๋ฅผ ์•Œ์•„์•ผ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฌธ์žฅ์„ ์ ์ ˆํžˆ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[๋ถ€๋ถ„์  ๋””ํดํŠธ ๊ฐ’ ์„ค์ •]

int YourFunc(int num1, int num2=5, int num3=7){...}
    YourFunc(10); //YourFunc(10, 5, 7);
    YourFunc(10, 20); //YourFunc(10, 10, 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)
 

→ ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๊ฐ€ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€๋ฏ€๋กœ, ์˜ค๋ฅธ์ชฝ์ด ๋นˆ ์ƒํƒœ๋กœ ์™ผ์ชฝ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋งŒ ์ผ๋ถ€ ์ฑ„์›Œ์ง„ ๋””ํดํŠธ ๊ฐ’์€ ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ์ผ์œผํ‚จ๋‹ค.


4. ์ธ๋ผ์ธ(inline) ํ•จ์ˆ˜

[๋งคํฌ๋กœ ํ•จ์ˆ˜์˜ ์žฅ์ ๊ณผ ํ•จ์ˆ˜์˜ inline ์„ ์–ธ]

#define SQUARE(x) ((x)*(x))

int main(void) {
    std::cout << SQUARE(5) << std::endl;
    return 0;
}
 

↓ ์„ ํ–‰ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ

int main(void) {
    std::cout << ((5)*(5)) << std::endl;
    return 0;
}
 
  • ์žฅ์ : ํ•จ์ˆ˜๊ฐ€ ์ธ๋ผ์ธํ™”๋˜์–ด ์„ฑ๋Šฅ์˜ ํ–ฅ์ƒ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ : ํ•จ์ˆ˜์˜ ์ •์˜ ๋ฐฉ์‹์ด ์ผ๋ฐ˜ ํ•จ์ˆ˜์— ๋น„ํ•ด์„œ ๋ณต์žกํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ณต์žกํ•œ ํ•จ์ˆ˜์˜ ์ •์˜์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
inline ํƒ€์ž… ํ•จ์ˆ˜์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜) {
         ์ •์˜....
}
inline int SQUARE(int x){
    return x*x;
}
int main(void) {
    std::cout << SQUARE(5) << std::endl;
    std::cout << SQUARE(12) << std::endl;
    return 0;
}
 
25
144
 
  • ํ‚ค์›Œ๋“œ inline ์„ ์–ธ์€ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•จ์ˆ˜์˜ ์ธ๋ผ์ธํ™”๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • inline ์„ ์–ธ์ด ๋˜์–ด๋„ ์ธ๋ผ์ธ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ , inline ์„ ์–ธ์ด ์—†์–ด๋„ ์ธ๋ผ์ธ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งคํฌ๋กœ ํ•จ์ˆ˜์˜ ์žฅ์ ์€ ์ทจํ•˜๊ณ  ๋‹จ์ ์€ ๋ณด์™„ํ•œ ๊ฒƒ์ด C++์˜ ์ธ๋ผ์ธ ํ•จ์ˆ˜์ด๋‹ค.

 

[์ธ๋ผ์ธ ํ•จ์ˆ˜์—๋Š” ์—†๋Š” ๋งคํฌ๋กœ ํ•จ์ˆ˜๋งŒ์˜ ์žฅ์ ]

#define SQUARE(x) ((x)*(x))
 

↓ ๋งคํฌ๋กœ ํ•จ์ˆ˜๋Š” ์ž๋ฃŒํ˜•์— ๋…๋ฆฝ์ ์ด๋‹ค.

std::cout<< SQUARE(12);    //intํ˜• ํ•จ์ˆ˜ํ˜ธ์ถœ
std::cout<< SQUARE(3.15);  //doubleํ˜• ํ•จ์ˆ˜ํ˜ธ์ถœ
 

โ€ป inline ์„ ์–ธ๋œ ํ•จ์ˆ˜๋ฅผ ์œ„์˜ ํ˜•ํƒœ๋กœ ํ˜ธ์ถœํ•˜๋ ค๋ฉด, ๊ฐ ์ž๋ฃŒํ˜• ๋ณ„๋กœ ํ•จ์ˆ˜๊ฐ€ ์˜ค๋ฒ„๋กœ๋”ฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ฆ‰, ๋งคํฌ๋กœ ํ•จ์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์ž๋ฃŒํ˜•์— ๋…๋ฆฝ์ ์ด์ง€ ๋ชปํ•˜๋‹ค.

  • inline int SQUARE(int x) { return x*x; }
  • intํ˜• ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

5.์ด๋ฆ„ ๊ณต๊ฐ„์— ๋Œ€ํ•œ ์†Œ๊ฐœ

[์ด๋ฆ„ ๊ณต๊ฐ„์˜ ๊ธฐ๋ณธ ์›๋ฆฌ]

namespace BestComImpl
{
      // ์ด๋ฆ„๊ณต๊ฐ„ ๋‚ด๋ถ€
}
namespace BestComImpl{
    void SimpleFunc(void){
        std::cout<<"BestCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜"<<std::endl;
    }
}

namespace ProgComImpl{
    void SimpleFunc(void){
        std::cout<<"ProgCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜"<<std::endl;
    }
}
int main(void) {
    BestComImpl::SimpleFunc();   //์ด๋ฆ„๊ณต๊ฐ„ BestComImpl์— ์ •์˜๋œ SimpleFunc์˜ ํ˜ธ์ถœ
    ProgComImpl::SimpleFunc();   //์ด๋ฆ„๊ณต๊ฐ„ ProgComImpl์— ์ •์˜๋œ SimpleFunc์˜ ํ˜ธ์ถœ
    return 0;
}
 
  • ์กด์žฌํ•˜๋Š” ์ด๋ฆ„ ๊ณต๊ฐ„์ด ๋‹ค๋ฅด๋ฉด ๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰์— ์žˆ์–ด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์˜ ์ถฉ๋Œ์„ ๋ง‰์„ ๋ชฉ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฆ„ ๊ณต๊ฐ„์ด๋‹ค.
  • โ€ป๋ฒ”์œ„ ์ง€์ • ์—ฐ์‚ฐ์ž: ::
  • ์ด๋ฆ„๊ณต๊ฐ„ :: ํ•จ์ˆ˜();

 

[์ด๋ฆ„ ๊ณต๊ฐ„ ๊ธฐ๋ฐ˜์˜ ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ์ •์˜์˜ ๋ถ„๋ฆฌ]

namespace BestComImpl{
    void SimpleFunc(void);     // ์ด๋ฆ„๊ณต๊ฐ„ ์ƒ์„ฑ, ํ•จ์ˆ˜ ์„ ์–ธ
}

namespace ProgComImpl{
    void SimpleFunc(void);
}

int main(void) {
    BestComImpl::SimpleFunc();
    ProgComImpl::SimpleFunc();  // ์ด๋ฆ„๊ณต๊ฐ„ ํ•จ์ˆ˜ ํ˜ธ์ถœ
    return 0;
}
// ํ•จ์ˆ˜ ์ •์˜
void BestComImpl::SimpleFunc(void){
    std::cout<<"BestCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜"<<std::endl;
}

void ProgComImpl::SimpleFunc(void){
    std::cout<<"ProgCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜"<<std::endl;
}
 

→ ์ด๋ฆ„ ๊ณต๊ฐ„ BestComImpl์— ์œ„์น˜ํ•˜๋Š” ํ•จ์ˆ˜ SimpleFunc์˜ ์„ ์–ธ๊ณผ ์ •์˜์˜ ๋ถ„๋ฆฌ

→ ์ด๋ฆ„ ๊ณต๊ฐ„ ProgComImpl์— ์œ„์น˜ํ•˜๋Š” ํ•จ์ˆ˜ SimpleFunc์˜ ์„ ์–ธ๊ณผ ์ •์˜์˜ ๋ถ„๋ฆฌ

[์ด๋ฆ„๊ณต๊ฐ„ ํ•จ์ˆ˜ ํ˜ธ์ถœ]
์ด๋ฆ„๊ณต๊ฐ„ :: ํ•จ์ˆ˜์ด๋ฆ„();

[์ด๋ฆ„๊ณต๊ฐ„ ํ•จ์ˆ˜ ์ •์˜]
ํƒ€์ž… ์ด๋ฆ„๊ณต๊ฐ„::ํ•จ์ˆ˜์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜){
    .... ํ•จ์ˆ˜์ •์˜....
}

 

[๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„ ๋‚ด์—์„œ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ]

namespace BestComImpl{
    void SimpleFunc(void);
}
namespace BestComImpl{
    void PrettyFunc(void);
}
 
  • ์„ ์–ธ๋œ ์ด๋ฆ„ ๊ณต๊ฐ„์˜ ์ด๋ฆ„์ด ๋™์ผํ•˜๋‹ค๋ฉด, ์ด ๋‘˜์€ ๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
  • ์ฆ‰, SimpleFunc์™€ PrettyFunc๋Š” ๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„ ์•ˆ์— ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค.

 

void BestComImpl::SimpleFunc(void){
    std::cout<<"BestCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜"<<std::endl;
    PrettyFunc();       // ๋™์ผ ์ด๋ฆ„๊ณต๊ฐ„
    ProgComImpl::SimpleFunc();   // ๋‹ค๋ฅธ ์ด๋ฆ„๊ณต๊ฐ„
}

void BestComImpl::PrettyFunc(void){
    std::cout<<"So Pretty!!"<<std::endl;
}
 
  • ์ด๋ฆ„ ๊ณต๊ฐ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๋ฌธ์ด ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„ ์•ˆ์—์„œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค.
  • ๋”ฐ๋ผ์‚ฌ SimpleFunc ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ์ด๋ฆ„ ๊ณต๊ฐ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ PrettyFunc ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[์ด๋ฆ„ ๊ณต๊ฐ„์˜ ์ค‘์ฒฉ]

namespace Parent{      //์ด๋ฆ„๊ณต๊ฐ„ Parent
    int num=2;         //Parent::num
    namespace SubOne{  //Parent::SubOne
        int num=3;     //Parent::SubOne::num 
    }
    namespace SubTwo{  //Parent::SubTwo
        int num=4;     //Parent::SubTwo::num
    }
}
 
ํ˜ธ์ถœ
std::cout<<Parent::num<<std::endl;
std::cout<<Parent::SubOne::num<<std::endl;
std::cout<<Parent::SubTwo::num<<std::endl;
  • ์ด๋ฆ„ ๊ณต๊ฐ„์€ ์ค‘์ฒฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ฒŒ๋” ์ด๋ฆ„ ๊ณต๊ฐ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[std::cout, std::cin, std::endl]

std::cout → ์ด๋ฆ„๊ณต๊ฐ„ std์— ์„ ์–ธ๋œ cout
std::cin  → ์ด๋ฆ„๊ณต๊ฐ„ std์— ์„ ์–ธ๋œ cin
std::endl → ์ด๋ฆ„๊ณต๊ฐ„ std์— ์„ ์–ธ๋œ endl
 
namespace std{
    cout...
    cin...
    endl...
}
 
  • <iostream>์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” cout, cin ๊ทธ๋ฆฌ๊ณ  endl์€ ์ด๋ฆ„ ๊ณต๊ฐ„ std ์•ˆ์— ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.
  • ์ด๋ ‡๋“ฏ ์ด๋ฆ„ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ, C++ ํ‘œ์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์€ ์ด๋ฆ„ ๊ณต๊ฐ„ std ์•ˆ์— ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

 

[using์„ ์ด์šฉํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„์˜ ๋ช…์‹œ]

#include <iostream>

namespace Hybrid{
	void HybFunc(void){
    	std::cout<<"So simple function!"<<std::endl;
        std::cout<<"In namespace Hybrid!"<<std::endl;
        }
}

int main(void){
	using Hybrid::HybFunc;
    HybFunc;
    return 0;
}
  • using ์„ ์–ธ์„ ํ†ตํ•ด์„œ ์ด๋ฆ„๊ณต๊ฐ„์˜ ์ง€์ • ์—†์ด HybFunc ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

int main(void) {
    int num=20;
    cout<<"Hello World!"<<endl;
    cout<<"Hello"<<"World!"<<endl;
    cout<<num<<' '<<'A';
    cout<<' '<<3.14<<endl;
    return 0;
}
 
  • using ์„ ์–ธ์€ ์ „์—ญ๋ณ€์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•จ์ˆ˜ ๋ฐ–์— ์„ ์–ธ์„ ํ•ด์•ผ ํ•จ!
  • ์ดํ›„๋ถ€ํ„ฐ cin, cout, endl์€ std::cin, std::cout, std::endl์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ์„ ์–ธ

 

#include <iostream>
using namespace std;

int main(void) {
    int num=20;
    cout<<"Hello World!"<<endl;
    cout<<"Hello"<<"World!"<<endl;
    cout<<num<<' '<<'A';
    cout<<' '<<3.14<<endl;
    return 0;
}
 
using namespace std;
  • ์ด๋ฆ„ ๊ณต๊ฐ„ std์— ์„ ์–ธ๋œ ๊ฒƒ์€ std๋ผ๋Š” ์ด๋ฆ„ ๊ณต๊ฐ„์˜ ์„ ์–ธ ์—†์ด ์ ‘๊ทผํ•˜๊ฒ ๋‹ค๋Š” ์„ ์–ธ

 

โ€ป๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•œ using namespace์˜ ์„ ์–ธ์€ ์ด๋ฆ„์˜ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„์˜ ์„ ์–ธ์„ ์˜๋ฏธ ์—†๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋”ฐ๋ผ์„œ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

[์ด๋ฆ„ ๊ณต๊ฐ„์˜ ๋ณ„์นญ ์ง€์ •๊ณผ ์ „์—ญ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ]

namespace AAA{
    namespace BBB{
        namespace CCC{
            int num1;
            int num2;
        }
    }
}
 
namespace ABC=AAA::BBB::CCC;
// AAA::BBB::CCC์— ๋Œ€ํ•ด ACC๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณ„์นญ ์„ ์–ธ ํ›„,

ABC::num1=10;
ABD::num2=20;
// ์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ๋ณ„์นญ์œผ๋กœ ์ด๋ฆ„๊ณต๊ฐ„์˜ ์„ ์–ธ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฆ„๊ณต๊ฐ„ ๋ณ„์นญ: namespace ABC=AAA::BBB::CCC

  • ์ง€์—ญ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ์ „์—ญ๋ณ€์ˆ˜์™€ ์ด๋ฆ„๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, ์ „์—ญ๋ณ€์ˆ˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์— ์˜ํ•ด ๊ฐ€๋ ค์ง„๋‹ค
int val=100; // ์ „์—ญ๋ณ€์ˆ˜

int SimpleFunc(void){
    int val=20;  // ์ง€์—ญ๋ณ€์ˆ˜
    val+=3;      // ์ง€์—ญ๋ณ€์ˆ˜ val์˜ ๊ฐ’ 3 ์ฆ๊ฐ€
    ::val+=7;    // ์ „์—ญ๋ณ€์ˆ˜ val์˜ ๊ฐ’ 7 ์ฆ๊ฐ€
}
 

 

  • ๋ฒ”์œ„์ง€์ • ์—ฐ์‚ฐ์ž๋Š” ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ์ „์—ญ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์—๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
 
int val = 100;  	// ์ „์—ญ๋ณ€์ˆ˜

int SimpleFunc(void){
	int val = 20;	// ์ง€์—ญ๋ณ€์ˆ˜
    val += 3;		// ์ง€์—ญ๋ณ€์ˆ˜ val์˜ ๊ฐ’ 3 ์ฆ๊ฐ€
    ::val += 7;		// ์ „์—ญ๋ณ€์ˆ˜ val์˜ ๊ฐ’ 7 ์ฆ๊ฐ€
  • ์ „์—ญ๋ณ€์ˆ˜ ์ ‘๊ทผ → ::๋ณ€์ˆ˜

 

 

'ํ”„๋กœ๊ทธ๋ž˜๋ฐ > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์—ดํ˜ˆC++]Chapter 01 - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ  (0) 2024.08.08

+ Recent posts