๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ‘จ๐Ÿพ‍๐Ÿ’ป C++

namespace

by eazuooz 2022. 8. 18.

๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋ฐ ๋ณตํ•ฉ ์œ ํ˜•๊ณผ ๊ฐ™์€ ๋ช…๋ช…๋œ ์—”ํ„ฐํ‹ฐ๋Š” C++์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ ์–ธ์ด ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ง€์ ์€ ๊ฐ€์‹œ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๋ธ”๋ก ์™ธ๋ถ€์— ์„ ์–ธ๋œ ์—”ํ‹ฐํ‹ฐ๋Š” ์ „์—ญ ๋ฒ”์œ„ ๋ฅผ ๊ฐ€์ง€๋ฉฐ , ์ด๋Š” ํ•ด๋‹น ์ด๋ฆ„์ด ์ฝ”๋“œ์˜ ์–ด๋А ๊ณณ์—์„œ๋‚˜ ์œ ํšจํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋‚˜ ์„ ํƒ๋ฌธ๊ณผ ๊ฐ™์ด ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋œ ์—”ํ‹ฐํ‹ฐ๋Š” ๋ธ”๋ก ๋ฒ”์œ„ ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์„ ์–ธ๋œ ํŠน์ • ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์™ธ๋ถ€์—์„œ๋Š” ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ธ”๋ก ๋ฒ”์œ„์˜ ๋ณ€์ˆ˜๋ฅผ ์ง€์—ญ ๋ณ€์ˆ˜ ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค .

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ํ™•์žฅ ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค(์ฆ‰, ์ค‘๊ด„ํ˜ธ}ํ•จ์ˆ˜ ์ •์˜๋ฅผ ๋‹ซ๋Š”๋‹ค), ๊ทธ๋Ÿฌ๋‚˜ ์™ธ๋ถ€๋Š” ์•„๋‹ˆ๋‹ค:

int foo;        // global variable

int some_function ()
{
  int bar;      // local variable
  bar = 0;
}

int other_function ()
{
  foo = 1;  // ok: foo is a global variable
  bar = 2;  // wrong: bar is not visible from this function
}

๊ฐ ๋ฒ”์œ„์—์„œ ์ด๋ฆ„์€ ํ•˜๋‚˜์˜ ์—”ํ„ฐํ‹ฐ๋งŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ™์€ ๋ฒ”์œ„์— ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

int some_function ()
{
  int x;
  x = 0;
  double x;   // wrong: name already used in this scope
  x = 0.0;
}

๋ธ”๋ก ๋ฒ”์œ„ ๊ฐ€ ์žˆ๋Š” ์—”ํ„ฐํ‹ฐ์˜ ๊ฐ€์‹œ์„ฑ์€ ๋‚ด๋ถ€ ๋ธ”๋ก์„ ํฌํ•จํ•˜์—ฌ ๋ธ”๋ก ๋๊นŒ์ง€ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‚ด๋ถ€ ๋ธ”๋ก์€ ๋‹ค๋ฅธ ๋ธ”๋ก์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋ฒ”์œ„์— ์žˆ๋Š” ์ด๋ฆ„์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด๋ฆ„์€ ๋‚ด๋ถ€ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์™ธ๋ถ€์— ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค. ์™ธ๋ถ€์— ์žˆ๋Š” ๋™์•ˆ์—๋„ ์›๋ž˜ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

// inner block scopes
#include <iostream>
using namespace std;

int main () {
  int x = 10;
  int y = 20;
  {
    int x;   // ok, inner scope.
    x = 50;  // sets value to inner x
    y = 50;  // sets value to (outer) y
    cout << "inner block:\n";
    cout << "x: " << x << '\n';
    cout << "y: " << y << '\n';
  }
  cout << "outer block:\n";
  cout << "x: " << x << '\n';
  cout << "y: " << y << '\n';
  return 0;
}

๋‚ด๋ถ€ ๋ธ”๋ก์— ์ˆจ๊ฒจ์ ธ y์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ก์„ธ์Šค y๋Š” ์—ฌ์ „ํžˆ ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

๋ฃจํ”„ ๋ฐ ์กฐ๊ฑด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ๋ธ”๋ก์„ ๋„์ž…ํ•˜๋Š” ์„ ์–ธ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜(์˜ˆ: for ๋˜๋Š” if์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜)๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋„์ž…ํ•˜๋Š” ๋ธ”๋ก์— ๋Œ€ํ•ด ๋กœ์ปฌ์ž…๋‹ˆ๋‹ค.

 

๋„ค์ž„์ŠคํŽ˜์ด์Šค

ํŠน์ • ๋ฒ”์œ„์—์„œ ํŠน์ • ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—”ํ„ฐํ‹ฐ๋Š” ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ก์€ ์ƒ๋Œ€์ ์œผ๋กœ ์งง์€ ๊ฒฝํ–ฅ์ด ์žˆ๊ณ  ์ด๋ฆ„์—๋Š” ์นด์šดํ„ฐ ๋ณ€์ˆ˜, ์ธ์ˆ˜ ๋“ฑ์˜ ์ด๋ฆ„ ์ง€์ •๊ณผ ๊ฐ™์€ ํŠน์ • ๋ชฉ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋กœ์ปฌ ์ด๋ฆ„์˜ ๊ฒฝ์šฐ ๊ฑฐ์˜ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋กœ์ปฌ์ด ์•„๋‹Œ ์ด๋ฆ„์€ ์ด๋ฆ„ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์Šต๋‹ˆ๋‹ค. , ํŠนํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์€ ํ•จ์ˆ˜, ์œ ํ˜• ๋ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ๋‘˜ ๋‹ค ๋ณธ์งˆ์ ์œผ๋กœ ์ง€์—ญ์ ์ด์ง€ ์•Š๊ณ  ์ผ๋ถ€๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์—ญ ๋ฒ”์œ„

๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ช…๋œ ์—”ํ„ฐํ‹ฐ ๋ฅผ ๋” ์ข์€ ๋ฒ”์œ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„ ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ ์š”์†Œ๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ฐธ์กฐ๋˜๋Š” ๋‹ค๋ฅธ ๋…ผ๋ฆฌ์  ๋ฒ”์œ„๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

namespace identifier
{
  named_entities
}

์—ฌ๊ธฐ์„œ identifier๋Š” ์œ ํšจํ•œ ์‹๋ณ„์ž์ด๊ณ  named_entities๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํฌํ•จ๋œ ๋ณ€์ˆ˜, ์œ ํ˜• ๋ฐ ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

namespace myNamespace
{
  int a, b;
}

์ด ๊ฒฝ์šฐ ๋ณ€์ˆ˜ a๋ฐ b๋Š” ์ด๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์„ ์–ธ๋œ ์ผ๋ฐ˜ ๋ณ€์ˆ˜ myNamespace์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹๋ณ„์ž( a๋˜๋Š” b)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” myNamespace๊ฒฝ์šฐ ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž๋กœ ์ ์ ˆํ•˜๊ฒŒ ํ•œ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ::. ์˜ˆ๋ฅผ ๋“ค์–ด ์™ธ๋ถ€์—์„œ ์ด์ „ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋‹ค์Œ myNamespace๊ณผ ๊ฐ™์ด ํ•œ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

myNamespace::a
myNamespace::b

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๋Š” ๋ฐ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

// namespaces
#include <iostream>
using namespace std;

namespace foo
{
  int value() { return 5; }
}

namespace bar
{
  const double pi = 3.1416;
  double value() { return 2*pi; }
}

int main () {
  cout << foo::value() << '\n';
  cout << bar::value() << '\n';
  cout << bar::pi << '\n';
  return 0;
}

์ด ๊ฒฝ์šฐ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: value. ํ•˜๋‚˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์ •์˜ foo๋˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” bar. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋•๋ถ„์— ์žฌ์ •์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ pi๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์ •๊ทœํ™”๋˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์•ก์„ธ์Šค๋˜๋Š” ๋ฐฉ์‹ bar( ์ฒ˜๋Ÿผ pi)์— ์ฃผ๋ชฉํ•˜์„ธ์š”. ๋ฐ˜๋ฉด ์—์„œ ๋‹ค์‹œ ์•ก์„ธ์Šค main๋˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๋กœ ํ•œ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค bar::pi.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ถ„ํ•  ๊ฐ€๋Šฅ: ์ฝ”๋“œ์˜ ๋‘ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋™์ผํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

namespace foo { int a; }
namespace bar { int b; }
namespace foo { int c; }

์ด๊ฒƒ์€ ์„ธ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค: aand is in cnamespace foo, while bis in namespace bar. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒˆ์—ญ ๋‹จ์œ„(์ฆ‰, ์†Œ์Šค ์ฝ”๋“œ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ)๋กœ ํ™•์žฅ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ

ํ‚ค์›Œ๋“œ using๋Š” ํ˜„์žฌ ์„ ์–ธ์  ์˜์—ญ(์˜ˆ: ๋ธ”๋ก)์— ์ด๋ฆ„์„ ๋„์ž…ํ•˜๋ฏ€๋กœ ์ด๋ฆ„์„ ํ•œ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

// using
#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
  int y = 10;
}

namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}

int main () {
  using first::x;
  using second::y;
  cout << x << '\n';
  cout << y << '\n';
  cout << first::y << '\n';
  cout << second::x << '\n';
  return 0;
}

main์—์„œ ๋ณ€์ˆ˜ x(์ด๋ฆ„ ํ•œ์ •์ž ์—†์Œ)๊ฐ€ ๋ฅผ ์ฐธ์กฐํ•˜๋Š” first::x๋ฐ˜๋ฉด ์„ ์–ธ ์— ์ง€์ •๋œ ๋Œ€๋กœ y๋ฅผ ์ฐธ์กฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์ฃผ๋ชฉ ํ•˜์‹ญ์‹œ์˜ค. ๋ณ€์ˆ˜ ๋ฐ ์—ฌ์ „ํžˆ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ •๊ทœํ™”๋œ ์ด๋ฆ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์›Œ๋“œ ๋Š” ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ์ง€์‹œ๋ฌธ์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.second::yusingfirst::ysecond::x

// using
#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
  int y = 10;
}

namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}

int main () {
  using namespace first;
  cout << x << '\n';
  cout << y << '\n';
  cout << second::x << '\n';
  cout << second::y << '\n';
  return 0;
}

์ด ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๊ฐ€ namespace ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์„ ์–ธํ•จ์œผ๋กœ์จ ์ด๋ฆ„ ํ•œ์ •์ž๋ฅผ first์ง์ ‘ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  x๊ฒƒ๋„ namespace ์—์„œ ์กฐํšŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ๋“ค์ด ๊ธฐ์ˆ ๋œ ๋™์ผํ•œ ๋ธ”๋ก์—์„œ๋งŒ ๋˜๋Š” ์ „์—ญ ๋ฒ”์œ„์—์„œ ์ง์ ‘ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์—์„œ ์œ ํšจ์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ธ”๋ก์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋จผ์ € ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.yfirst

usingusing namespace

// using namespace example
#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
}

namespace second
{
  double x = 3.1416;
}

int main () {
  {
    using namespace first;
    cout << x << '\n';
  }
  {
    using namespace second;
    cout << x << '\n';
  }
  return 0;
}

๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•จ๋ฆฌ์–ด์‹ฑ

๊ธฐ์กด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ๋ณ„์นญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

namespace new_name = current_name;

 

ํ‘œ์ค€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค

ํ‘œ์ค€ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  ์—”ํ„ฐํ‹ฐ(๋ณ€์ˆ˜, ์œ ํ˜•, ์ƒ์ˆ˜ ๋ฐ ํ•จ์ˆ˜)๋Š” std๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด ์ž์Šต์„œ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์˜ˆ์—๋Š” ๋‹ค์Œ ์ค„์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

using namespace std;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด std๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ์ด๋ฆ„์„ ์ฝ”๋“œ์— ์ง์ ‘ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ดํ•ด๋ฅผ ๋•๊ณ  ์˜ˆ์ œ์˜ ๊ธธ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ด ์ž์Šต์„œ์—์„œ ์ˆ˜ํ–‰๋˜์ง€๋งŒ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ ์š”์†Œ๋ฅผ ํ•œ์ •ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋Œ€์‹ :

cout << "Hello world!";

๋Œ€์‹  ๋‹ค์Œ์„ ๋ณด๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

std::cout << "Hello world!";

std๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์š”์†Œ๊ฐ€ ์„ ์–ธ๊ณผ ํ•จ๊ป˜ ๋„์ž… using๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ์™„์ „ํžˆ ์ •๊ทœํ™” ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๊ฒฐ๊ณผ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์ด๋‚˜ ํšจ์œจ์„ฑ์„ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๋ช…์‹œ์  ์ž๊ฒฉ์ด ์„ ํ˜ธ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ ์Šคํƒ€์ผ ์„ ํ˜ธ๋„์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

using namespace 

์ „์—ญ ๋˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„ ์˜ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ €์žฅ์†Œ ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ๊ธฐ๊ฐ„ ๋™์•ˆ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์ •์  ์ €์žฅ์†Œ ๋ผ๊ณ  ํ•˜๋ฉฐ ์ง€์—ญ ๋ณ€์ˆ˜ (๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜) ์— ๋Œ€ํ•œ ์ €์žฅ์†Œ์™€ ๋Œ€์กฐ๋ฉ๋‹ˆ๋‹ค . ์ด๋“ค์€ ์ž๋™ ์ €์žฅ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ €์žฅ์†Œ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ธ”๋ก์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋™์ผํ•œ ์ €์žฅ์†Œ๊ฐ€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์˜ ์ง€์—ญ ๋ณ€์ˆ˜์— ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ •์  ์ €์žฅ์†Œ ๊ฐ€ ์žˆ๋Š” ๋ณ€์ˆ˜์™€ ์ž๋™ ์ €์žฅ์†Œ

๊ฐ€ ์žˆ๋Š” ๋ณ€์ˆ˜ ์‚ฌ์ด์—๋Š” ๋˜ ๋‹ค๋ฅธ ์‹ค์งˆ์ ์ธ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค . - ์ •์  ์ €์žฅ์†Œ ๊ฐ€ ์žˆ๋Š” ๋ณ€์ˆ˜
๋ช…์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ (์˜ˆ: ์ „์—ญ ๋ณ€์ˆ˜)๋Š” ์ž๋™์œผ๋กœ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
- ๋ช…์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ž๋™ ์ €์žฅ ๋ณ€์ˆ˜ (์˜ˆ: ๋กœ์ปฌ ๋ณ€์ˆ˜)๋Š” ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ’์ด ๋ฏธ์ •์ž…๋‹ˆ๋‹ค.

// static vs automatic storage
#include <iostream>
using namespace std;

int x;

int main ()
{
  int y;
  cout << x << '\n';
  cout << y << '\n';
  return 0;
}

์‹ค์ œ ์ถœ๋ ฅ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ ๊ฐ’๋งŒ x0์œผ๋กœ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. y์‹ค์ œ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐ’(0 ํฌํ•จ)์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

'๐Ÿ“ Development Study > ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๊ตฌ์กฐ์ฒด  (0) 2022.08.19
๋™์  ๋ฉ”๋ชจ๋ฆฌ  (0) 2022.08.19
ํฌ์ธํ„ฐ  (0) 2022.08.19
๋ฌธ์ž์—ด  (0) 2022.08.19
๋ฐฐ์—ด  (0) 2022.08.19

๋Œ“๊ธ€