staticÀ» ÀÌÇØÇÏÀÚ

 

Preface

ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ù º¸¸é static¸¸Å­ ´Ù¾çÇÑ °÷¿¡¼­ ´Ù¾çÇÑ Àǹ̷Π¸¹ÀÌ ¾²ÀÌ´Â Å°¿öµå°¡ ¾ø´Â °Í °°½À´Ï´Ù. C/C++°ú °°Àº Á¤ÀûÀÎ ¾ð¾î »Ó¸¸ ¾Æ´Ï¶ó JAVA¿Í °°ÀÌ µ¿Àû ¹ÙÀεùÀ» ±âº»À¸·Î ÇÏ´Â ¾ð¾î¿¡¼­Á¶Â÷ staticÀÌ »ç¿ëµÇ´Â °ÍÀ» º¸¸é ¿¾ ¼Ó´ãó·³ '±Í¿¡ °É¸é ±Í°ÉÀÌ, ÄÚ¿¡ °É¸é ÄÚ°ÉÀÌ'°¡ µÇ´Â °ÍÀÌ staticÀ̶ó´Â Å°¿öµåÀÎ °Í °°½À´Ï´Ù.

±×·¯³ª À¯°¨½º·´°Ôµµ ÀÌ·¸°Ô ÀÚÁÖ ¾²ÀÌ°í Áß¿äÇÏ°Ô »ç¿ëµÇ´Â staticÀ» À߸ø ÀÌÇØÇÏ°í Àְųª ¸¹Àº Ư¡µéÀ» ¸ð¸£°í ÀÖ´Â »ç¶÷µéÀÌ ÀÇ¿Ü·Î ¸¹½À´Ï´Ù.

ƯÈ÷ ½ÃÁß¿¡ ÆǸŵǴ ´ë´Ù¼öÀÇ ÇÁ·Î±×·¡¹Ö ÀÔ¹® ¼­ÀûµéÀÌ static¿¡ ´ëÇؼ­ Á¤È®ÇÏ°í ÀÚ¼¼ÇÏ°Ô ¼³¸íÇÏ°í ÀÖÁö ¾Ê´Ù¶ó´Â »ç½ÇÀÌ ÀÌ·¸°Ô ºÎÁ·ÇÏ°Ô ³ª¸¶ static¿¡ ´ëÇÑ ±ÛÀ» ¾²°Ô µÈ ÀÌÀ¯¶ó ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

static ¿ë¾îÀÇ °³³ä ¹× ¼ºÁú

Á¦°¡ ±× µ¿¾È °øºÎ¸¦ Çϸ鼭 °¡Àå Àý½ÇÇÏ°Ô ´À³¤ Á¡ÀÌ Çϳª ÀÖ´Ù¸é ¹Ù·Î ¾î¶² °³³äÀ» ÀÍÈ÷±â À§Çؼ­´Â ¿ì¼± ¿ë¾îÀÇ ¶æÀ» ¹Ù·Î ÀÌÇØÇÏ´Â °ÍÀÌ °¡Àå Áß¿äÇÏ´Ù¶ó´Â °ÍÀÔ´Ï´Ù.

ƯÈ÷ ÄÄÇ»ÅÍ ºÐ¾ß¿Í °°ÀÌ Á¤¸» ¸¹°í ´Ù¾çÇÑ ¿ë¾î¿Í ¾à¾îµéÀÌ ÆÇÀ» Ä¡´Â ºÐ¾ß¿¡¼­ ¿ë¾îÀÇ ¶æÀ» Á¤È®ÇÏ°Ô ÀÌÇØÇÏ´Â °ÍÀº ¸» ±×´ë·Î '¹ÝÀº ¸Ô°í µé¾î°¡´Â °Í'ÀÔ´Ï´Ù.

±×·± Àǹ̿¡¼­ ¿ì¸®°¡ °¡Àå óÀ½ ÇÒ ÀÏÀº staticÀ̶ó´Â ¿ë¾î¿¡ ´ëÇÑ »çÀüÀû ¶æÀ» ¾Ë¾Æº¸´Â °ÍÀÌ ¾Æ´Ò±î »ý°¢ÇÕ´Ï´Ù.

 

static

 

1 Á¤Áö(ð¡ò­)ÇÏ°í ÀÖ´Â, º¯È­ÇÏÁö ¾Ê´Â; Á¤ÀûÀÎ, ¿òÁ÷ÀÓÀÌ ¾ø´Â(¹Ý:dynamic). (¶Ç´Â statical)

2 ¡´¹°¸®¡µ Á¤ÀûÀÎ, Á¤¾Ð(ð¡äâ)ÀÇ.

~ pressure Á¤¾Ð.

3 ¡´Àü±â¡µ Á¤Àü(ð¡ï³)(±â(Ѩ))ÀÇ; °øÀü(Íöï³)ÀÇ.

 

[Ãâó : ¾ßÈÄ ¿µ¾î»çÀü]

 

¾ßÈÄ¿¡ ¹°¾îº¸´Ï staticÀÌ À§¿Í °°Àº ¶æÀ̶ó°í Çϴ±º¿ä...ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­¸¸ÀÌ ¾Æ´Ï¶ó ¿µ¾î ÀÚü¿¡¼­µµ »ý°¢º¸´Ù ´Ù¾çÇÑ ¶æÀ» °¡Áö°í ÀÖ´Â °Í °°½À´Ï´Ù.('Á¤Àü±â'¶ó´Â ¶æÀ» °¡Áö°í ÀÖ´Ù´Â »ç½ÇÀ» Àü ¿À´Ã óÀ½ ¾Ë¾Ò½À´Ï´Ù.)

¾î·µç ´ëÃæ staticÀ̶ó´Â ´Ü¾î°¡ dz±â´Â À̹ÌÁö´Â 'ºÒº¯¼º, °í¿äÇÔ' Á¤µµ·Î »ý°¢µÇ¸ç ½ÇÁ¦ ¾ÕÀ¸·Î ¼³¸íÇÒ staticÀÇ ¿©·¯ °¡Áö ¼ºÁúµéÀº ´ëü·Î ÀÌ·¯ÇÑ Àǹ̵é°ú °ü·ÃÀÌ ÀÖ½À´Ï´Ù.

±×·³ C/C++¿¡¼­ staticÀÌ °®´Â ¼ºÁúµéÀ» Á¦°¡ ¾Æ´Â ´ë·Î Çѹø ³ª¿­ÇØ º¸°Ú½À´Ï´Ù.(Âü°í·Î ÀÌÁ¦ºÎÅÍ Á¦°¡ »ç¿ëÇÏ´Â '°´Ã¼'¶ó´Â ¿ë¾î´Â Ŭ·¡½º °´Ã¼»Ó¸¸ÀÌ ¾Æ´Ï¶ó C++ÄÄÆÄÀÏ·¯°¡ Á¦°øÇÏ´Â built-in type º¯¼ö±îÁö Æ÷ÇÔÇÏ´Â Ãß»óÀûÀÎ °³³äÀ¸·Î ÀÌÇØÇϽñ⠹ٶø´Ï´Ù. ¿Ö³ÄÇÏ¸é ½ÇÁ¦ staticÀÇ ¼ºÁúÀº ±× ŸÀÔ¿¡ »ó°ü¾øÀÌ µ¿ÀÏÇÏ°Ô Àû¿ëµÇ±â ¶§¹®ÀÔ´Ï´Ù. ¶§¿¡ µû¶ó¼­ °´Ã¼¶ó´Â ¿ë¾î¿Í º¯¼ö¶ó´Â ¿ë¾î¸¦ È¥¿ëÇÏ´õ¶óµµ ¾çÇØÇÏ¿© Áֽñ⠹ٶø´Ï´Ù.)

 

1.       Á¤Àû Áö¼Ó¼º(static storage duration) : static °´Ã¼µéÀº ÀÏ´Ü Çѹø »ý¼ºÀÌ µÇ¸é ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§±îÁö(C++Ç¥ÁØ¿¡¼­´Â main()ÇÔ¼ö¿¡¼­ ¸®ÅÏ µÉ ¶§ ȤÀº exit()¸¦ È£ÃâÇßÀ» ¶§ ¼Ò¸êµÈ´Ù°í ¸í½ÃµÇ¾îÀÖ½À´Ï´Ù.) À¯ÁöµË´Ï´Ù. Áï, °´Ã¼ÀÇ ¼Ò¸ê ½ÃÁ¡ÀÌ scope¿¡ ¿µÇâ ¹ÞÁö ¾Ê°í Ç×»ó ÀÏÁ¤ÇÕ´Ï´Ù.

2.       À¯Àϼº(singleton) : ¾î¶² ¸ðµâ ´ÜÀ§(function, class, file)¿¡¼­µçÁö static °´Ã¼´Â ´Ü Çѹø¸¸ »ý¼ºµË´Ï´Ù.

3.       ³»ºÎ ¿¬°á¼º(internal linkage) : Àü¿ª static °´Ã¼³ª ÇÔ¼ö´Â link ´Ü°è¿¡¼­ ¿ÜºÎ ¹ÙÀεùÀÌ ÀϾÁö ¾Ê½À´Ï´Ù. Áï, ¿ÜºÎ ÆÄÀÏ¿¡¼­´Â ³»ºÎ Àü¿ª static °´Ã¼/ÇÔ¼ö¸¦ ÂüÁ¶Çϰųª È£ÃâÇÒ ¼ö ¾ø½À´Ï´Ù.

 

±×·¸´Ù¸é ¿Ö static Å°¿öµå°¡ ºÙÀº º¯¼ö³ª ÇÔ¼ö°¡ ÀÌ·± ¼ºÁúÀ» °¡Áö°Ô µÇ´ÂÁö¿¡ ´ëÇؼ­ Â÷±ÙÂ÷±Ù ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

 

binding(¹ÙÀεù)

static¿¡ ´ëÇؼ­ ÀÌÇØÇϱâ À§Çؼ­´Â ¿ì¼± bindingÀ̶ó´Â °³³äÀ» ÀÌÇØÇÏ¿©¾ß ÇÕ´Ï´Ù. ¹ÙÀεùÀ̶ó´Â ´Ü¾î ¿ª½Ã ´Ù¾çÇÑ Àǹ̷Π»ç¿ëµÇ´Â ¿ë¾îÀε¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ¸»ÇÏ´Â ¹ÙÀεùÀ̶õ ¾î¶² ½Éº¼(º¯¼ö³ª ÇÔ¼ö)ÀÇ ¼Ó¼ºÀ» °áÁ¤Áþ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

 

int main()

  {

  int x;

  x = 3;

 

  return 0;

  }

 

À§¿Í °°Àº C ¼Ò½º°¡ ÀÖÀ» ¶§ ÀÌ°ÍÀ» ÄÄÆÄÀÏ·¯°¡ ÄÄÆÄÀÏ ÇÏ°Ô µÇ¸é ¿ì¼± ÄÄÆÄÀÏ·¯´Â int x; ¶ó´Â ¼±¾ð¹®À» º¸°í¼­ x¶ó´Â À̸§ÀÇ º¯¼ö¸¦ ÀÚ½ÅÀÇ ½Éº¼ Å×ÀÌºí¿¡ ±â·ÏÀ» Çϸç ÀÌ ¶§ ±× º¯¼öÀÇ ¼Ó¼º(type, scope, value µî)À» ÀúÀåÇÏ°Ô µË´Ï´Ù. ±×¸®°í ±× ´ÙÀ½¿¡ ÀÖ´Â x = 3; À̶ó´Â ±¸¹®¿¡¼­ x¶ó´Â º¯¼ö°¡ ÀÚ½ÅÀÇ ½Éº¼ Å×ÀÌºí¿¡ ÀÖ´ÂÁö »ìÆ캸°í, ÀÖÀ¸¸é ±× ¼Ó¼ºÀ» Âü°íÇÏ¿© ÇØ´ç ±¸¹®ÀÇ Å¸ÀÔ Ã¼Å©¿Í °°Àº ¹®¹ý °Ë»ç¸¦ ¼öÇàÇÏ°Ô µË´Ï´Ù.(¹°·Ð x°¡ ½Éº¼ Å×ÀÌºí¿¡ ¾ø´Ù¸é ±×·± º¯¼ö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ÄÄÆÄÀÏ ¿¡·¯¸¦ ¹ß»ý½Ãŵ´Ï´Ù.)

ÀÌÁ¦ Á» ´õ º¹ÀâÇÑ ¿¹¸¦ »ìÆ캸°Ú½À´Ï´Ù.

 

/// test1.cpp

#include <iostream>

 

int global; // ---> 1)

void extern_fun(int a);

int main()

  {

  global = 5; // ---> 2)

  extern_fun(3);

  std::cout << global << '\n';

 

  return 0;

  }

 

/// test2.cpp

extern int global;  // ---> 3)

void extern_fun(int a)

  {

  global += a;      // ---> 4)

  }

 

 À§ ¼Ò½º¿¡¼­´Â globalÀ̶ó´Â Àü¿ª º¯¼ö¸¦ µÎ °³ÀÇ ÆÄÀÏ¿¡¼­ ÂüÁ¶ÇÏ°í ÀÖ½À´Ï´Ù. À§¿¡¼­ ¾ð±ÞÇßµíÀÌ ÄÄÆÄÀÏ·¯´Â º¯¼ö ¼±¾ð¹®ÀÌ ³ªÅ¸³ª¸é ÇØ´ç º¯¼ö¸¦ ½Éº¼ Å×ÀÌºí¿¡ µî·ÏÇÏ°í ÀÌÈÄ¿¡ º¯¼ö¸¦ »ç¿ëÇÏ´Â ±¸¹®À» ¸¸³¯ ¶§¸¶´Ù ÇØ´ç º¯¼ö°¡ ÀÚ½ÅÀÇ ½Éº¼ Å×ÀÌºí¿¡ µî·ÏµÇ¾î ÀÖ´ÂÁö »ìÆ캸°í ±× Á¤º¸¿¡ µû¶ó ¹®¹ý °Ë»ç¸¦ ¼öÇàÇÏ°Ô µË´Ï´Ù.

 ±×·±µ¥ ÄÄÆÄÀÏ·¯´Â Ç×»ó ÆÄÀÏ ´ÜÀ§·Î ÄÄÆÄÀÏÀ» ¼öÇàÇÏ¸ç »õ·Î¿î ÆÄÀÏÀ» ÄÄÆÄÀÏ ÇÒ ¶§ ÀÌÀü¿¡ ÀÌ¹Ì ÄÄÆÄÀÏ ÇÑ ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸ °°Àº °ÍµéÀº µû·Î ±â·ÏÇÏÁö ¾Ê½À´Ï´Ù. Áï, Ç×»ó »õ·Î¿î ¸¶À½°¡ÁüÀ¸·Î °¢°¢ÀÇ ÆÄÀϵéÀ» µ¶¸³ÀûÀ¸·Î ÄÄÆÄÀÏ ÇÏ°Ô µË´Ï´Ù.

±×·¡¼­ À§ÀÇ °æ¿ì test1.cpp¸¦ ¸ÕÀú ÄÄÆÄÀÏ Çß´Ù°í Çؼ­ test2.cpp¿¡¼­ globalº¯¼ö¸¦ »ç¿ëÇÏ´Â ±¸¹®À» ÄÄÆÄÀÏ ÇÒ ¶§ test1.cpp¿¡¼­ ¸¸µç ½Éº¼ Å×À̺íÀ» ÂüÁ¶ÇÏÁö´Â ¾Ê½À´Ï´Ù.

 ¶§¹®¿¡ µÎ °³ ÀÌ»óÀÇ ÆÄÀÏ¿¡¼­ °°Àº Àü¿ª º¯¼ö¸¦ ÂüÁ¶ÇÏ°Ô µÇ¸é ±×·± »ç½ÇÀ» ¹Ì¸® ¼Ò½º Äڵ带 ÅëÇØ ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁà¾ß ÇÕ´Ï´Ù. ¸¸¾à ±×·¸Áö ¾ÊÀ¸¸é test2.cpp¿¡¼­ 4)±¸¹®À» ÄÄÆÄÀÏ ÇÒ ¶§ globalÀ̶ó´Â º¯¼ö°¡ ¼±¾ðµÇ¾î ÀÖÁö ¾Ê´Ù ¶ó°í ¿¡·¯¸¦ ¹ß»ý½ÃÅ°°Å³ª ȤÀº test1.cpp¿Í test2.cppÀÇ globalº¯¼ö¸¦ º°°³ÀÇ º¯¼ö·Î Ãë±ÞÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù.

 ±×·¯¹Ç·Î ÇÁ·Î±×·¡¸Ó´Â »çÀü¿¡ test1.cpp¿Í test2.cpp¿¡¼­ »ç¿ëÇÏ´Â global º¯¼ö°¡ µ¿ÀÏÇÑ °ÍÀÌ´Ù¶ó´Â »ç½ÇÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁÖ°Ô µÇ´Âµ¥ À§ÀÇ ¼Ò½º¿¡¼­ 3)¿¡ ÀÖ´Â externÀº ¹Ù·Î ±×·± ¿ªÇÒÀ» ¼öÇàÇÏ´Â Å°¿öµåÀÔ´Ï´Ù.

externÀÇ Àǹ̴ 'ÇØ´ç º¯¼ö´Â ¿ÜºÎ¿¡¼­ ÂüÁ¶ÇÏ¿© »ç¿ëÇÏ°Ú´Ù'¶ó´Â ¶æÀÔ´Ï´Ù. ¸¸¾à 3)ÀÌ ¾ø´Ù¸é test2.cpp¸¦ ÄÄÆÄÀÏ ÇÒ ¶§ 4)¿¡¼­ globalÀ̶ó´Â º¯¼ö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿¡·¯°¡ ¹ß»ýÇÒ °ÍÀ̸ç, 3)¿¡¼­ externÀÌ ¾ø´Ù¸é test1.cpp¿Í test2.cppÀÇ globalÀº º°°³ÀÇ º¯¼ö·Î Ãë±ÞµÇ¾î ÇÁ·Î±×·¥ °á°ú°¡ 8ÀÌ ¾Æ´Ï¶ó 5°¡ ³ª¿À°Ô µÉ °ÍÀÔ´Ï´Ù.

 ±×·¸´Ù¸é ÄÄÆÄÀÏ·¯´Â °¢°¢ÀÇ ÆÄÀÏÀ» ÄÄÆÄÀÏ ÇÒ ¶§ ´Ù¸¥ ÆÄÀÏÀÇ ½Éº¼ °ªµéÀ» ÂüÁ¶ÇÏÁö ¾ÊÀ½¿¡µµ ºÒ±¸ÇÏ°í ¾î¶»°Ô Àü¿ª º¯¼ö¸¦ °øÀ¯ÇÒ ¼ö ÀÖÀ»±î¿ä? ±×°ÍÀº ¹Ù·Î ¸µÅ© °úÁ¤ÀÌ Àֱ⠶§¹®¿¡ °¡´ÉÇÕ´Ï´Ù.

ÄÄÆÄÀÏ ½Ã ÄÄÆÄÀÏ·¯´Â Àü¿ª º¯¼ö³ª ÇÔ¼ö¿¡ ´ëÇÑ ÂüÁ¶/È£ÃâÀ» Á÷Á¢ÀûÀÎ ¾î¼Àºí¸®¾î ±¸¹®À¸·Î º¯È¯ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó(´Ù½Ã ¸»Çϸé ÇØ´ç º¯¼öÀÇ ¸Þ¸ð¸® ÁÖ¼Ò³ª ÇÔ¼öÀÇ ÄÚµå ÁÖ¼Ò·Î ¹Ù·Î º¯È¯ÇÏÁö ¾Ê°í) ƯÁ¤ÇÑ À̸§À» ºÎ¿©ÇÏ¿© ÇØ´ç À̸§ÀÇ Àü¿ª º¯¼ö³ª ÇÔ¼ö¿¡ ´ëÇÑ ÂüÁ¶/È£Ãâ ±¸¹®À¸·Î ¹Ù²î°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

 ¿¹¸¦ µé¾î À§ÀÇ ¼Ò½ºÀÇ °æ¿ì¿¡ test2.cpp¿¡¼­ ÂüÁ¶ÇÏ´Â globalÀÌ ¿ÜºÎ¿¡¼­ ÂüÁ¶µÇ´Â º¯¼öÀÌ´Ù¶ó´Â »ç½ÇÀ» ÄÄÆÄÀÏ ÇÑ ¸ñÀû ÄÚµå(object code)¿¡ ±â·ÏÇØ µÎ¸é ¸µÄ¿´Â ÇØ´ç º¯¼ö¿Í µ¿ÀÏÇÑ À̸§À¸·Î Á¤ÀÇµÈ ÆÄÀÏÀ» °Ë»öÇÏ°í test1.cpp¿¡¼­ ÀÏÄ¡µÈ À̸§À» ¹ß°ßÇϸé ÇØ´ç Àü¿ª º¯¼ö ÂüÁ¶ ±¸¹®µéÀ» ¿Ã¹Ù¸¥ ¼Ó¼º(»ó´ë ÁÖ¼Ò)°ªÀ¸·Î ¹Ù²Ù°Ô µË´Ï´Ù.

 ÀÌ·¸°Ô ¾î¶² º¯¼ö³ª ÇÔ¼öÀÇ ¼Ó¼º°ªÀ» °áÁ¤Áþ´Â °úÁ¤À» ¹ÙÀεùÀ̶ó°í ÇÕ´Ï´Ù. ±×¸®°í À§ÀÇ °æ¿ìó·³ ¸µÅ© °úÁ¤¿¡¼­ ±×·± ¼Ó¼º°ªÀ» °áÁ¤Áþ´Â °ÍÀ» ¸µÅ© ¹ÙÀεù(link binding), ȤÀº µ¿Àû ¹ÙÀεù(dynamic binding)À̶ó ÇÕ´Ï´Ù.

 À§ÀÇ ¾ßÈÄ »çÀü¿¡¼­µµ ³ª¿Í ÀÖµíÀÌ ÄÄÇ»ÅÍ ºÐ¾ß¿¡¼­ dynamic¿¡ ¹Ý´ëµÇ´Â ¿ë¾î´Â staticÀÌ¸ç °ÅÀÇ Ç×»ó ÀÌ µÎ Á¸Àç´Â ¾ç¸³ÇÕ´Ï´Ù. Áï, ¾Õ¿¡ dynamicÀ̶ó´Â ´Ü¾î°¡ ºÙ´Â ¾î¶² ¿ë¾î°¡ ÀÖ´Ù¸é °ÅÀÇ Ç×»ó staticÀÌ ¾Õ¿¡ ºÙ´Â ¹Ý´ëµÇ´Â ÀǹÌÀÇ ¿ë¾î°¡ Á¸ÀçÇÕ´Ï´Ù.

¹ÙÀεù ¿ª½Ã ¿¹¿Ü°¡ ¾Æ´Ï¾î¼­ µ¿Àû ¹ÙÀεù¿¡ ¹Ý´ëµÇ´Â °³³äÀ¸·Î Á¤Àû ¹ÙÀεù(static binding)ÀÌ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ¹ÙÀεùÀÌ ÄÄÆÄÀÏ ½ÃÁ¡¿¡ ÀÌ·ç¾î Áö´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. Áï, ÇØ´ç º¯¼ö³ª ÇÔ¼öÀÇ ¼Ó¼ºÀÌ ÄÄÆÄÀÏ °úÁ¤¿¡¼­ °áÁ¤µË´Ï´Ù.

Á¤Àû ¹ÙÀεù¿¡ ÀÇÇØ Á¤ÀǵǴ º¯¼ö³ª ÇÔ¼ö´Â ¸µÅ© °úÁ¤ ÀÌÀü¿¡ ÀÌ¹Ì ¼Ó¼ºÀÌ °áÁ¤µÇ±â ¶§¹®¿¡ ¾Æ·¡¿Í °°Àº Ư¡À» °¡Áö°Ô µË´Ï´Ù.

 

  1. Á¤Àû ¹ÙÀεù º¯¼ö´Â extern Å°¿öµå¸¦ ÅëÇØ ¿ÜºÎ ÆÄÀÏ¿¡¼­ ÂüÁ¶°¡ ºÒ°¡´ÉÇÏ´Ù.

  2. Á¤Àû ¹ÙÀεù ÇÔ¼ö´Â ¿ÜºÎ ÆÄÀÏ¿¡¼­ È£ÃâÀÌ ºÒ°¡´ÉÇÏ´Ù.

 

static Àü¿ª º¯¼ö³ª ÇÔ¼ö¸¦ »ç¿ëÇØ º¸½Å ºÐµéÀº ¾Æ½Ã°ÚÁö¸¸ À§ÀÇ Æ¯Â¡Àº ¹Ù·Î static Àü¿ª º¯¼ö¿Í ÇÔ¼öÀÇ Æ¯Â¡°ú ÀÏÄ¡ÇÕ´Ï´Ù. Áï, static Å°¿öµå´Â ÇØ´ç Àü¿ª º¯¼ö³ª ÇÔ¼ö¸¦ ÄÄÆÄÀÏ·¯°¡ Á¤ÀûÀ¸·Î ¹ÙÀεùÀ» Çϵµ·Ï ÇÁ·Î±×·¡¸Ó°¡ 'Áö½Ã'ÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.

ÄÄÆÄÀÏ Å¸ÀÓ ¹ÙÀεùÀ» Á¤Àû(static) ¹ÙÀεùÀ̶ó°í ¸»ÇÏ´Â ÀÌÀ¯´Â ¾Æ¸¶µµ Çѹø ÄÄÆÄÀÏ ½Ã¿¡ ¼Ó¼ºÀÌ °áÁ¤µÇ°í ³ª¸é 'º¯ÇÏÁö ¾Ê´Â´Ù' ¶ó°í ÇÏ´Â ºÒº¯¼º ¶§¹®ÀÌ ¾Æ´Ñ°¡ ÃßÃøµË´Ï´Ù. ¾î·µç ÀÌ·± Ư¡À» °¡Áö°í Àֱ⿡ static º¯¼ö´Â µ¶Æ¯ÇÑ ¼ºÁúÀ» Áö´Ï°í ÀÖ½À´Ï´Ù.

 ¾Æ·¡ÀÇ ¿¹Á¦´Â Ãʺ¸ÀÚ°¡ ÈçÈ÷ ÇÏ°Ô µÇ´Â ½Ç¼öÀÔ´Ï´Ù.

 

/// header.h

int global;

 

/// a.cpp

#include <iostream>

#include "header.h"

 

void b_func();

int main()

  {

  global = 3;

  b_func();

  std::cout << global << std::endl;

 

  return 0;

  }

 

/// b.cpp

#include "header.h"

void b_func()

  {

  global = 5;

  }

 

 À§ ¼Ò½º´Â Á¤»óÀûÀ¸·Î ÄÄÆÄÀÏ µË´Ï´Ù.

 ¾Õ¿¡¼­ ¾ð±ÞÇßµíÀÌ ÄÄÆÄÀÏ·¯´Â ÆÄÀÏ º°·Î µ¶¸³ÀûÀ¸·Î ÄÄÆÄÀÏÀ» ¼öÇàÇÕ´Ï´Ù. µû¶ó¼­ a.cpp ÄÄÆÄÀÏ ½Ã header.h¿¡ ÀÖ´Â global ¼±¾ð¹®À» ÅëÇØ global º¯¼ö¸¦ Çϳª »ý¼ºÇÏ¿© 3À» ÇÒ´çÇÕ´Ï´Ù. ¶ÇÇÑ b.cpp ¿ª½Ã header.h¿¡ ÀÖ´Â global ¼±¾ð¹®À» ÅëÇØ global º¯¼ö¸¦ Çϳª »ý¼ºÇÏ¿© 5¸¦ ÇÒ´çÇÕ´Ï´Ù. µû¶ó¼­ µÑ ´Ù Àû¹ýÇÑ ¼Ò½ºÀÔ´Ï´Ù.

 ÇÏÁö¸¸ ¸µÅ© °úÁ¤¿¡¼­ ¸µÄ¿´Â a.cpp¿Í b.cpp°¡ µ¿ÀÏÇÑ À̸§(global)ÀÇ Àü¿ª º¯¼ö¸¦ µÎ °³ »ý¼ºÇÑ °ÍÀ» º¸°í ¸µÅ© ¿¡·¯¸¦ ¹ß»ý½Ãŵ´Ï´Ù.(ÀÌ ¶§ ¹ß»ýÇÏ´Â ¿¡·¯´Â redefinition errorÀÔ´Ï´Ù. ¾Æ¸¶ Ãʺ¸ÀÚµéÀÌ °¡Àå ¸¹ÀÌ Á¢ÇÏ´Â ¿¡·¯ Áß ÇϳªÀÏ °ÍÀÔ´Ï´Ù.)

 ±×·¯¸é À§ ¼Ò½º¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇØ º¸°Ú½À´Ï´Ù.

 

// header.h

static int global; /// int globalÀ» static Àü¿ª º¯¼ö·Î ¼öÁ¤

 

// a.cpp

///¿ø ¼Ò½º¿Í µ¿ÀÏ...

 

// b.cpp

/// ¿ø ¼Ò½º¿Í µ¿ÀÏ....

 

ÀÌ·¸°Ô ¼öÁ¤Çϸé Á¤»óÀûÀ¸·Î ÄÄÆÄÀÏ ¹× ¸µÅ©°¡ ¼öÇàµË´Ï´Ù. ¿Ö³ÄÇϸé static Àü¿ª º¯¼ö´Â ÄÄÆÄÀÏ ½ÃÁ¡¿¡ ¹ÙÀεùÀÌ ¿Ï·áµÇ°í µû¶ó¼­ ¸µÅ© °úÁ¤¿¡¼­ ÇØ´ç º¯¼ö¿¡ ´ëÇÑ ¹ÙÀεù 󸮸¦ ÇÏÁö ¾ÊÀ¸¹Ç·Î Áߺ¹ Á¤ÀǸ¦ °Ë»çÇÏÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.

±×·¯³ª ´ë½Å a.cpp¿Í b.cpp¿¡¼­ »ç¿ëÇÏ´Â global º¯¼ö´Â ¿ÏÀüÈ÷ º°µµÀÇ °´Ã¼·Î 󸮵˴ϴÙ. µû¶ó¼­ À§ ÇÁ·Î±×·¥¿¡¼­ a.cpp°¡ Ãâ·ÂÇÏ´Â global°ªÀº - b_func()ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á ¹Ù²î´Â °ª- 5°¡ ¾Æ´Ï¶ó - ¿ø·¡ a.cpp¿¡¼­ ÇÒ´çÇÑ °ª - 3ÀÌ µË´Ï´Ù. Áï, a.cpp¿Í b.cpp¿¡¼­ »ç¿ëÇÏ´Â global Àü¿ª º¯¼ö´Â »ç½Ç À̸§¸¸ ¶È°°À» »Ó º°°³·Î Ãë±ÞµÇ´Â ´Ù¸¥ º¯¼ö°¡ µË´Ï´Ù. (µû¶ó¼­ ÀÌ·± ½ÄÀÇ »ç¿ëÀº ÇÁ·Î±×·¡¸Ó¿¡°Ô È¥¶õÀ» ÁÙ »ÓÀÌ¸ç ¹ö±×¸¦ ¾ß±â½ÃÅ°´Â ÁÁÁö ¾ÊÀº ÄÚµù ¹æ½ÄÀÔ´Ï´Ù. ±×·¯¹Ç·Î static Àü¿ª º¯¼ö¸¦ ¼±¾ðÇÒ ¶§´Â Ç×»ó header ÆÄÀÏÀÌ ¾Æ´Ñ c/cpp ÆÄÀÏ¿¡ ÇØÁà¾ß ÇÕ´Ï´Ù.)

¾î·µç static Àü¿ª º¯¼ö´Â Ç×»ó ÇØ´ç º¯¼ö°¡ ¼±¾ðµÈ ÆÄÀÏ ³»ºÎ¿¡¼­¸¸ ÂüÁ¶°¡ °¡´ÉÇÕ´Ï´Ù. ±×¸®°í ÀÌ°ÍÀº static Àü¿ª ÇÔ¼ö ¿ª½Ã ¸¶Âù°¡ÁöÀ̸ç staticÀ¸·Î ¼±¾ðµÈ Àü¿ª ÇÔ¼ö´Â ¿ÜºÎ ÆÄÀÏ¿¡¼­´Â »ç¿ëÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.(¸¸¾à ¿ÜºÎ¿¡¼­ È£ÃâÇÏ·Á°í ÇÏ¸é ¸µÅ© ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù.) 

¶§¹®¿¡ º¸Åë CÇÁ·Î±×·¡¸ÓµéÀº ¿ÜºÎ ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Â ȤÀº ¿ÜºÎ¿¡¼­ »ç¿ëÇϱ⸦ ¿øÄ¡ ¾Ê´Â ÇÔ¼öµéÀº staticÀ¸·Î Á¤ÀÇÇÏ°ï ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á À̸§ Áߺ¹¿¡ ÀÇÇÑ È¥¶õ µîÀ» ÇÇÇÒ ¼ö ÀÖ´Â ºÎ¼öÀûÀÎ ÀåÁ¡À» ¾òÀ» ¼öµµ ÀÖ½À´Ï´Ù.(C++¿¡¼­´Â namespace¿Í class°¡ »ý±â¸é¼­ ÀÌ·± ÀåÁ¡ÀÌ ¸¹ÀÌ »ç¶óÁ³½À´Ï´Ù.)

±×¸®°í ÀÌ·¸°Ô ÆÄÀÏ ³»ºÎ¿¡¼­¸¸ ÂüÁ¶ °¡´ÉÇÑ static ÀÇ ¼ºÁúÀ» internal linkage(³»ºÎ ¿¬°á¼º)À̶ó°í ºÎ¸¨´Ï´Ù.

 

storage duration and scope

´Ù ¾Æ½Ã´Â À̾߱â Çϳª Çغ¸°Ú½À´Ï´Ù. º¯¼ö´Â °üÁ¡¿¡ µû¶ó ´Ù¾çÇÏ°Ô ºÐ·ù°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. ¿ì¼± °ø°£(scope)¹üÀ§¿¡ µû¶ó Àü¿ª º¯¼ö¿Í Áö¿ª º¯¼ö·Î ºÐ·ù°¡ °¡´ÉÇÕ´Ï´Ù. ±×¸®°í ¸Þ¸ð¸® ÇÒ´ç ÁÖü¿¡ µû¶ó Á¤Àû ÇÒ´ç º¯¼ö¿Í µ¿Àû ÇÒ´ç º¯¼ö·Î ºÐ·ùÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¶ÇÇÑ ¸Þ¸ð¸® ÇÒ´ç À§Ä¡¿¡ µû¶ó ½ºÅÃ(stack) º¯¼ö¿Í Á¤Àû ¿µ¿ª º¯¼ö, µ¿Àû ¿µ¿ª(heap) º¯¼ö·Î ³ª´­ ¼ö ÀÖÀ¸¸ç ±× ¿Ü¿¡µµ Á¤Àû(static)º¯¼ö, »ó¼ö(const)º¯¼ö, Æ÷ÀÎÅÍ º¯¼ö µîµî ¿©·¯ Á¾·ù·Î ±¸ºÐÀÌ °¡´ÉÇÕ´Ï´Ù.

°Ô´Ù°¡ ÀÌ·¯ÇÑ ºÐ·ù´Â º¹ÇÕÀûÀ¸·Î Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù. °¡·É, Á¤Àû Àü¿ª º¯¼ö(static global variable), Á¤Àû Áö¿ª º¯¼ö(static local variable), Àü¿ª »ó¼ö º¯¼ö(global const variable) µîµîÀÌ ÀÖ½À´Ï´Ù.

½ÉÁö¾î ¾î¶² ºÐ·ù Á¤ÀÇ´Â ¼­·Î ¹ÐÁ¢ÇÑ °ü°è(ȤÀº µ¿µîÇÑ ÀǹÌ)¸¦ °¡Áý´Ï´Ù. ½ºÅà º¯¼ö¿Í ºñÁ¤Àû(non-static) Áö¿ª º¯¼ö´Â »ç½Ç °°Àº Àǹ̸¦ °¡Áö°í ÀÖÀ¸¸ç, Àü¿ª(global) º¯¼ö¿Í Á¤Àû(static) º¯¼ö´Â Á¤Àû ¿µ¿ª º¯¼ö¿¡ ÇØ´çÇÕ´Ï´Ù.

 ÀÌ·¸°Ô º¯¼öÀÇ Á¾·ù°¡ ´Ù¾çÇÏ°Ô ºÐ·ùµÇ´Â °ÍÀº ÇÁ·Î±×·¡¹Ö ½Ã ¿©·¯ °¡Áö »óȲÀÌ ¹ß»ýÇÏ°Ô µÇ°í À̶§ ÀÌ·± »óȲ¿¡ ¸Â´Â º¯¼ö ¼³Á¤À» À§ÇÑ ¿©·¯ °¡Áö °³³äµéÀÌ ÇÊ¿äÇ߱⠶§¹®À̸ç ÀÌ·¯ÇÑ ¿©·¯ °³³äµéÀÌ ¼­·Î º¹ÇÕÀûÀÎ °ü°è¸¦ ¸ÎÀ¸¸ç »ç¿ëµÇ´Â °ÍÀº ±×·¯ÇÑ °³³äµéÀ» ±¸Ã¼È­ ½ÃÅ°´Â °úÁ¤¿¡¼­ ±¸Çö »óÀÇ ÀÌÀ¯·Î ¸¸µé¾îÁø ºÎ¼öÈ¿°ú(side-effect)¶ó ÇÒ ¼ö ÀÖ½À´Ï´Ù.

°¡·É Æ÷Æ®¶õ °°Àº °æ¿ì ¸ðµç º¯¼ö°¡ Àü¿ª º¯¼ö·Î ÁöÁ¤µË´Ï´Ù(Âü°í·Î Àú´Â Æ÷Æ®¶õÀ» Á÷Á¢ »ç¿ëÇØ º»ÀûÀº ¾ø½À´Ï´Ù.). Áï, Áö¿ª º¯¼ö¶ó´Â °³³äÀÌ ¾ø½À´Ï´Ù. µû¶ó¼­ ÆĶó¹ÌÅÍ Àü´ÞÀ̳ª ½ºÅà º¯¼ö »ý¼º¿¡ µû¸¥ ÇÔ¼ö È£Ãâ ¿À¹öÇìµå°¡ ¾ø±â ¶§¹®¿¡ °£´ÜÇÑ ÇÁ·Î±×·¡¹Ö ½Ã ÁÁÀº ¼º´ÉÀ» º¸¿©ÁÝ´Ï´Ù.

±×·¯³ª ´ë½Å ÀÏȸ¼º º¯¼ö¸¦ »ç¿ëÇÏ´õ¶óµµ Áö¼ÓÀûÀÎ º¯¼ö À¯Áö°¡ ÇÊ¿äÇϱ⠶§¹®¿¡ À̸§ Áþ±â(naming) ¹®Á¦³ª ȤÀº °°Àº º¯¼ö¸¦ ´Ù¸¥ ¿ëµµ·Î °è¼Ó Àç»ç¿ëÇÏ°Ô µÇ°í µû¶ó¼­ º¹ÀâÇÑ ÇÁ·Î±×·¡¹Ö ½Ã Äڵ尡 ³­ÇØÇØÁö´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù.

±×·¡¼­ C¿Í °°Àº ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­´Â Áö¿ª º¯¼ö¶ó´Â °³³äÀ» µµÀÔÇßÀ¸¸ç ±×¿¡ µû¶ó scope¶ó´Â °³³äÀÌ »ý°Ü³µ½À´Ï´Ù.

±×¸®°í ÀÌ·± scope¶ó´Â °³³äÀÌ µé¾î°¡¸é¼­ µ¿½Ã¿¡ storage durationÀ̶ó´Â °³³äÀÌ »ý°Ü³µ½À´Ï´Ù. ´õ ÀÌ»ó ÂüÁ¶°¡ ÇÊ¿ä ¾ø´Â, ´Ù½Ã ¸»Çϸé scope¸¦ ¹þ¾î³­ Áö¿ª º¯¼ö¿¡ ´ëÇؼ­ ÇÁ·Î±×·¡¸Ó°¡ ÀÏÀÏÀÌ ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ ÀÚµ¿ÀûÀ¸·Î ÇØ´ç Áö¿ª º¯¼öÀÇ ¸Þ¸ð¸®¸¦ ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ ÇØÁ¦ÇØÁÜÀ¸·Î½á º¸´Ù Ãß»óÈ­µÈ ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

±×·¡¼­ ÀÌ·± Áö¿ª º¯¼öÀÇ Æ¯Â¡À» ±¸Ã¼È­ÇÏ´Â °úÁ¤¿¡¼­ °¡Àå ¼Õ½±°í ¿À¹öÇìµå°¡ Àû°Ô µå´Â ±â¹ýÀ» ±¸ÇöÇÑ °ÍÀÌ ¹Ù·Î ½ºÅÃÀ» ÅëÇÑ Áö¿ª º¯¼ö °ü¸® ±â¹ýÀÎ °ÍÀÔ´Ï´Ù.(µû¶ó¼­ ½ºÅà º¯¼ö´Â °ð ºñÁ¤Àû Áö¿ª º¯¼ö°¡ µË´Ï´Ù.)

¾î·µç Á¡Á¡ ÇÁ·Î±×·¡¹ÖÀÌ °í³­À̵µ ÀÛ¾÷ÀÌ µÇ°í ±×¿¡ µû¶ó ¿ä±¸ Á¶°ÇÀÌ ±î´Ù·Î¿öÁö¸é¼­ º¸´Ù ´Ù¾çÇÑ °³³äÀÇ ¸Þ¸ð¸® ¹× º¯¼ö °ü¸®°¡ ÇÊ¿äÇÏ¿´°í ±×¿¡ µû¶ó C/C++¿Í °°Àº ¾ð¾î¿¡¼­´Â Á÷Á¢ »ç¿ëÀÚ°¡ ¸Þ¸ð¸®¸¦ °ü¸®ÇÏ´Â Æ÷ÀÎÅÍ ¹× µ¿Àû ÇÒ´ç °³³äÀÌ »ý°Ü³µ½À´Ï´Ù.

±×·± ¿ÍÁß¿¡ 'ƯÁ¤ scope¸¦ °¡Áö¸é¼­ ÇØ´ç º¯¼öÀÇ storage durationÀº scope¿¡ »ó°ü¾øÀÌ ÇÁ·Î±×·¥ ½ÇÇà ½Ã°£ ³»³» À¯Áö µÉ ¼ö ÀÖ´Â' ±×·± ±â¹ýÀÌ ÇÊ¿äÇÏ°Ô µÇ¾ú½À´Ï´Ù. Àü¿ª º¯¼ö´Â ÇÁ·Î±×·¥ ½ÇÇà ½Ã°£ ³»³» À¯ÁöµÇÁö¸¸ ´ë½Å ´Ù¸¥ ºí·°À̳ª ¸ðµâ, ÆÄÀϵ鿡¼­ ÇØ´ç º¯¼ö¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°Ô µÇ°í ±×·¯¸é ÇÁ·Î±×·¥ÀÇ ¾ÈÁ¤¼ºÀÌ ¶³¾îÁú ¼ö Àֱ⠶§¹®¿¡, °¡±ÞÀû ÂüÁ¶ ¹üÀ§¸¦ ÃÖ¼ÒÈ­ÇÏ´Â °ÍÀ» ¹Ì´öÀ¸·Î ¿©±â´Â ÇÁ·Î±×·¡¹Ö ¼¼°è¿¡¼­´Â ´Ù¸¥ ´ë¾ÈÀ» ÇÊ¿ä·Î ÇÑ °ÍÀÔ´Ï´Ù.

ÇÑÆí, static º¯¼ö´Â ¾Õ¼­ ¸»ÇÑ ¹Ù¿Í °°ÀÌ ÄÄÆÄÀÏ ½ÃÁ¡¿¡ ¹ÙÀεùÀÌ µÇ´Â º¯¼öÀÔ´Ï´Ù. ±×·±µ¥ ÀÌ º¯¼ö¸¦ Àü¿ªÀÌ ¾Æ´Ñ Áö¿ª º¯¼ö·Î ¼±¾ðÀ» ÇÑ´Ù¸é ¹º°¡ ºñ ³í¸®ÀûÀÎ »óȲÀÌ ¹ß»ýÇÕ´Ï´Ù. ¿Ö³ÄÇϸé Áö¿ª º¯¼ö´Â ½ºÅÃÀ» ÅëÇØ °ü¸®µÇ¹Ç·Î ±× ¼Ó¼º(¿©·¯ ¼Ó¼ºµéÀÌ ÀÖ°ÚÁö¸¸ ¿©±â¼­´Â ¸Þ¸ð¸® ÁÖ¼Ò°ª)ÀÌ ¼ö½Ã·Î ¹Ù²î°Ô µÇ´Âµ¥ ÀÌ´Â staticÀÇ ¿øÄ¢¿¡ ¾î±ß³ª´Â µ¿ÀÛÀÔ´Ï´Ù.

°á±¹ static Áö¿ª º¯¼ö´Â Çã¿ëÀ» ÇÏÁö ¸»°Å³ª ȤÀº Áö¿ª º¯¼ö¿Í´Â µ¶¸³ÀûÀΠ󸮰¡ ÇÊ¿äÇÏ°Ô µÇ¾ú½À´Ï´Ù. ±×¸®°í C/C++ ¿¡¼­´Â ÈÄÀÚ¸¦ ¼±ÅÃÇÏ¿´½À´Ï´Ù. ±× ÀÌÀ¯´Â ¾Æ¸¶µµ ¾Õ¼­ ¾ð±ÞÇÑ Çʿ伺 ¶§¹®ÀÌ ¾Æ´Ò±î »ý°¢ÇÕ´Ï´Ù.(»ç½Ç À§ÀÇ À̾߱âµéÀº ´Ù Á¦°¡ ÃßÃøÇÑ À̾߱âÀÔ´Ï´Ù. ½ÇÁ¦·Î ¾î¶² ÀÌÀ¯·Î static Áö¿ª º¯¼ö°¡ »ý°Ü³µ´ÂÁö´Â K&R¸¸ÀÌ ¾Ë°ÚÁÒ...)

µû¶ó¼­ staticÀ¸·Î ¼±¾ðµÈ Áö¿ª º¯¼ö´Â ´Ù¸¥ Áö¿ª º¯¼ö¿Í ´Þ¸® ½ºÅÃÀÌ ¾Æ´Ï¶ó Á¤Àû ¿µ¿ª¿¡ ÇÒ´çÀÌ µÊÀ¸·Î½á ÇØ´ç scope¸¦ ¹þ¾î³ª ½ºÅÃÀÌ ÇØÁ¦µÇ´õ¶óµµ ±× »óŸ¦ À¯ÁöÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ¾îÂ÷ÇÇ static Àü¿ª º¯¼ö ¿ª½Ã Á¤Àû ¿µ¿ª¿¡ ÇÒ´çµÇ¹Ç·Î ±¸Çö »óÀ¸·Îµµ ÅëÀÏµÈ Ã³¸®°¡ °¡´ÉÇÏ¿© ÀÌ´Â ÃæºÐÈ÷ ÇÕ¸®ÀûÀÎ °áÁ¤À̶ó »ý°¢µË´Ï´Ù.

¾î·µç °á±¹ static Áö¿ª º¯¼ö´Â Áö¿ª º¯¼öÀÇ ÀϺΠƯ¼º(scope)°ú Àü¿ª º¯¼öÀÇ ÀϺΠƯ¼º(static storage duration)À» °®´Â µ¶Æ¯ÇÑ Á¸Àç°¡ µÆ½À´Ï´Ù. ¿¹¸¦ µéÀÚ¸é,

 

#include <iostream>

 

int sum(int a)

  {

  static int x = 0; /// ÃÖÃÊ sum È£Ã⠽à Çѹø ¸¸ »ý¼º&ÃʱâÈ­µÊ

  x += a;

  return x;         /// sum()ÇÔ¼ö Á¾·á ½Ã¿¡µµ ¼Ò¸ê ¾ÈµÊ

  }

 

/* 1ºÎÅÍ 100±îÁö ÇÕÀ» Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥*/

int main()

  {

  int i = 0;

  for (; i < 100; ++i)

    sum(i);

   

  std::cout << sum(100) << '\n';

 

  return 0;       /// main()ÇÔ¼ö Á¾·á ½Ã sum()ÇÔ¼ö ³»¿¡ ÀÖ´Â x º¯¼ö ¼Ò¸ê

  }

 

ÀÌ·± ½ÄÀÇ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù. ¶Ç,

 

#include <iostream>

int* local_fun(int a)

  {

  int x = 0;

  x += a;

  return &x;

 

int* static_fun(int a)

  {

  static int x = 0;

  x += a;

  return &x;

  }

 

int main()

  {

  int* p = NULL;

  p = local_fun(3);

  std::cout << *p << '\n';   /// ºñÁ¤»óÀûÀÎ °ª Ãâ·Â

  p = static_fun(3);

  std::cout << *p << '\n';   /// Á¤»ó°ª(3) Ãâ·Â

  return 0;

  }

 

ÀÌó·³ Áö¿ª º¯¼öÀÇ °æ¿ì ½ºÅÃÀ» ÅëÇØ ¸Þ¸ð¸®°¡ °ü¸®µÇ¹Ç·Î ¿ÜºÎ ÂüÁ¶°¡ ºÒ°¡´ÉÇÏÁö¸¸ static Áö¿ª º¯¼öÀÇ °æ¿ì Á¤Àû ¿µ¿ª¿¡¼­ ¸Þ¸ð¸®°¡ °ü¸®µÇ¹Ç·Î Æ÷ÀÎÅÍ È¤Àº ·¹ÆÛ·±½º¸¦ ÅëÇÑ ÂüÁ¶°¡ °¡´ÉÇÕ´Ï´Ù. ¿©±â¼­ scope¿¡ ´ëÇÑ Á¦¾àÀº ¾î¶² ½ÇÇà ¸ÞÄ«´ÏÁò¿¡ ÀÇÇÑ °ÍÀÌ ¾Æ´Ï¶ó ´ÜÁö ÄÄÆÄÀÏ·¯¿¡ ÀÇÇÑ ¹®¹ý °Ë»ç¿¡ ÀÇÇÑ °ÍÀÓÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.(ÀÌ·± Ư¡ ¶§¹®¿¡ static °´Ã¼´Â singleton ÆÐÅÏÀ» ±¸ÇöÇϴµ¥ »ç¿ëµÇ±âµµ ÇÕ´Ï´Ù.)

¾î¶µç ÀÌ·¸°Ô static °´Ã¼´Â Àü¿ª °´Ã¼·Î ¼±¾ðµÇ¸é internal linkage Ư¼ºÀ» °¡ÁöÁö¸¸ Áö¿ª °´Ã¼·Î ¼±¾ðµÉ °æ¿ì static storage duration Ư¼ºÀ» °¡Áö°Ô µË´Ï´Ù. ±×¸®°í ÀÌ·± Ư¼ºÀÌ ¸ðµÎ staticÀ̶ó°í ÇÏ´Â ¿ë¾î°¡ °¡Áø °³³ä¿¡ ÀÇÇØ ¹ß»ýµÈ °ÍÀÓÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

 

C++¿¡¼­ÀÇ static

C¿¡¼­ staticÀÌ °¡Áø Àǹ̴ À§¿¡¼­ ¸»ÇÑ µÎ °¡Áö°¡ ÀüºÎÀÔ´Ï´Ù. ±×·¯³ª C++¿¡¼­´Â °´Ã¼ÁöÇâ Æз¯´ÙÀÓÀÌ µµÀԵǾú°í ±×¿¡ µû¶ó Ŭ·¡½º¶ó°í ÇÏ´Â °³³äÀÌ µµÀԵǾú½À´Ï´Ù.

Ŭ·¡½º´Â ´Ù ¾Æ½Ã´Ù½ÃÇÇ '¹«¾ð°¡ °øÅëµÈ Ã¥ÀÓÀ» ¼öÇàÇϱâ À§ÇØ °°ÀÌ ¸ð¾Æ ³õÀ¸¸é ÁÁÀ» ¸¸ÇÑ º¯¼ö¿Í ÇÔ¼öµéÀ» ÇϳªÀÇ ¸ðµâ·Î ĸ½¶È­½ÃŲ »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔ'ÀÔ´Ï´Ù. ±×¸®°í ÀÌ·± Ŭ·¡½º ŸÀÔ¿¡ ÀÇÇØ »ý¼ºµÈ º¯¼öµéÀ» '°´Ã¼(Object)'¶ó°í ÇÕ´Ï´Ù.

»ç½Ç ÀÌ·± Ŭ·¡½º³ª °´Ã¼¶ó´Â °ÍÀº À̸§Àº ±×·² µí ÇÏÁö¸¸ ¸·»ó ±× ¼¼ºÎ ±¸Á¶¸¦ ¹Ø¹Ù´Ú±îÁö ÆÄÇìÃÄ º¸¸é C¿¡¼­ »ç¿ëÇÏ´Â ±¸Á¶Ã¼(structure)¿Í Å« Â÷ÀÌ°¡ ¾ø½À´Ï´Ù. ¸â¹ö º¯¼öµéÀº ´ÜÁö ±¸Á¶Ã¼ ¸â¹ö¿¡ »ç¿ëÀÚ ±ÇÇÑÀ̶ó°í ÇÏ´Â ÄÄÆÄÀÏ Å¸ÀÓ Á¦¾à »çÇ׸¸À» Ãß°¡ÇÑ °Í¿¡ ºÒ°úÇϸç, ¸â¹ö ÇÔ¼ö¶ó°í ÇÏ´Â °ÍÀº ½Ç»ó ÇØ´ç Ŭ·¡½º °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ÆĶó¹ÌÅÍ·Î ÀÚµ¿ Ãß°¡ÇØ ÁÖ´Â ÆíÀ̼º ³ôÀº ÇÔ¼ö¿¡ ºÒ°úÇÕ´Ï´Ù. Áï,

 

class CppClass

  {

  public:

    CppClass() : x_(0) {}

    void SetX(int a) { x_ = a; }

    int x_;

  }

 

À§ÀÇ Å¬·¡½º¸¦ C¾ð¾î·Î ¹Ù²Ù°Ô µÇ¸é

 

struct CStruct

  {

  int x_;

  }

 

void CStruct_ctor(CStruct* this)

  {

  this->x_ = 0;

  }

 

void CStruct_SetX(CStruct* this, int a)

  {

  this->x_ = a;

  }

 

ÀÌ·¸°Ô µË´Ï´Ù. ±×·¡¼­ ½ÇÁ¦ »ç¿ë½Ã¿¡

 

CStruct tmp;

CStruct_ctor(&tmp);

CStruct_SetX(&tmp, 3);

 

ÀÌ·¸°Ô »ç¿ëÇÒ °ÍÀ» Ŭ·¡½º¸¦ ÀÌ¿ëÇؼ­

 

CppClass tmp;

tmp.SetX(3);

 

ÀÌ·± ½ÄÀ¸·Î »ç¿ëÇÔÀ¸·Î½á »ý¼ºÀÚ³ª SetX()¿Í °°Àº ¸â¹ö ÇÔ¼ö°¡ CppClass¶ó´Â Ŭ·¡½ºÀÇ °´Ã¼¿¡ ¹ÐÁ¢ÇÏ°Ô °ü·ÃµÇ¾ú´Ù´Â °ÍÀ» ÇÁ·Î±×·¡¸Ó°¡ º¸±â¿¡ º¸´Ù Á÷°üÀûÀÌ µÉ ¼ö ÀÖµµ·Ï ÇØÁØ ÀåÄ¡¿¡ ºÒ°úÇÕ´Ï´Ù.

¹°·Ð ÀÌ·¸°Ô ¸Æ ºüÁö°Ô ¸»À» ÇÏ¿´Áö¸¸ C++, JAVA, Smalltalkµé°ú °°Àº °´Ã¼ ÁöÇâ ¾ð¾îµéÀº °´Ã¼ ÁöÇâ Æз¯´ÙÀÓÀ» ÅëÇØ »ó¼Ó, ´ÙÇü¼º, ĸ½¶È­¶ó´Â ´Ù¾çÇÑ ÀåÄ¡¸¦ Á¦°øÇÏ¿© ÇöÀç °¡Àå ³Î¸® »ç¿ëµÇ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÎ °ÍÀº Ʋ¸²¾ø½À´Ï´Ù.(Àû¾îµµ ÀÌÁ¦ »ç¶÷µéÀÌ ´õ ÀÌ»ó C¸¦ ¹Ýµå½Ã ¹è¿ì·Á°í ÇÏÁö´Â ¾Ê½À´Ï´Ù.)

¾î¶µç °´Ã¼ ÁöÇâ ¾ð¾îµéÀº ¸ðµç ÇÁ·Î±×·¡¹ÖÀ» °´Ã¼ ´ÜÀ§·Î ±¸ÇöÇÏ°í Á¶Á÷È­ÇÏ°Ô µÇ¸ç µû¶ó¼­ ¸ðµç º¯¼öµéÀº ÀÚ½ÅÀÌ ¼ÓÇÑ °´Ã¼¿Í ±× »ý¸í ÁÖ±â(life time)¸¦ °°ÀÌ ÇÕ´Ï´Ù. ´Ù½Ã ¸»ÇÏ¸é ¸â¹ö º¯¼öÀÇ scope¿Í storage durationÀº ÀÚ½ÅÀÌ ¼ÓÇÑ °´Ã¼¿¡ ¿µÇâÀ» ¹Þ´Â´Ù´Â ¶æÀÔ´Ï´Ù.

±×·±µ¥ ¿©±â¼­µµ Áö¿ª º¯¼ö¿¡¼­¿Í À¯»çÇÑ ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù. Áï, Ŭ·¡½º ¸â¹ö º¯¼ö ¼±¾ð ½Ã¿¡ staticÀ» ¾Õ¿¡ ºÙÈ÷°Ô µÇ¸é ¾î¶»°Ô µÇ´À³Ä ÇÏ´Â °ÍÀÔ´Ï´Ù.

Ŭ·¡½º ¸â¹ö º¯¼ö´Â °´Ã¼°¡ »ý¼ºµÉ ¶§ °°ÀÌ »ý¼ºµÇ°í °´Ã¼°¡ ¼Ò¸êµÉ ¶§ °°ÀÌ ¼Ò¸êµË´Ï´Ù. °Ô´Ù°¡ °´Ã¼°¡ Áö¿ª º¯¼ö·Î ¼±¾ðµÇ¸é ¸â¹ö ¿ª½Ã ½ºÅÿ¡ À§Ä¡ÇÏ°Ô µÇ¸ç °´Ã¼°¡ µ¿Àû ÇÒ´çµÇ¸é ¸â¹ö ¿ª½Ã µ¿Àû ¿µ¿ª¿¡ À§Ä¡ÇÕ´Ï´Ù.

±×·±µ¥ ¾Õ¼­ ¾ð±ÞÇßµíÀÌ staticÀº Áö¿ª º¯¼öµç Àü¿ª º¯¼öµç »ó°ü¾øÀÌ static storage durationÀ» °®½À´Ï´Ù. µû¶ó¼­ ¾Æ¹«¸® °´Ã¼ ÁöÇâÀ̶ó ÇÏ´õ¶óµµ ÀÌ·¯ÇÑ ±âÁ¸ÀÇ ¹ýÄ¢À» °Å½º¸£´Â ÇൿÀ» ÇÏ´Â °ÍÀº ³í¸®ÀûÀÌÁö ¸øÇÕ´Ï´Ù.

µû¶ó¼­ ÀÌ°Í ¿ª½Ã µÎ °¡Áö ¼±ÅÃÀÌ ÇÊ¿äÇÏ°Ô µÇ¾ú½À´Ï´Ù. ¸â¹ö º¯¼ö¿¡ ´ëÇÑ staticÀ» Çã¿ëÇÏ´À³Ä, ±×·¸Áö ¾Ê´À³Ä...±×¸®°í C++Àº ÀüÀÚ¸¦ ¼±ÅÃÇÏ¿´½À´Ï´Ù. ´Ü ÀÌ·¸°Ô ÇÏ°í ³ª´Ï ÇÑ °¡Áö ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù. static ¸â¹ö º¯¼ö¸¦ Çã¿ëÇÏ°Ô µÇ¸é ±âÁ¸ÀÇ static Ư¼ºÀ» µû¸£±â À§Çؼ­ static storage durationÀ» °¡Á®¾ß ÇÏ°í ±×·¯·Á¸é ÀÌ º¯¼ö´Â Á¤Àû ¿µ¿ª¿¡ À§Ä¡ÇÏ¿©¾ß Çϴµ¥ °´Ã¼´Â ¹Ýµå½Ã Á¤Àû ¿µ¿ª¿¡ À§Ä¡Çϸ®¶ó´Â º¸ÀåÀÌ ¾ø±â ¶§¹®ÀÔ´Ï´Ù.

°á±¹ ÀÌ·± ¸ð¼øÀ» ÇØ°áÇϱâ À§Çؼ­´Â static ¸â¹ö º¯¼ö¸¦ °´Ã¼¿¡¼­ ºÐ¸®ÇÏ¿©¾ß ÇÕ´Ï´Ù. Áï, °´Ã¼ÀÇ ºÎºÐ ÁýÇÕÀ¸·Î½á°¡ ¾Æ´Ï¶ó ´ÜÁö Ŭ·¡½ºÀÇ À̸§ °ø°£¿¡ ÇÑÁ¤ ¹Þ´Â Àü¿ª º¯¼öó·³ Ãë±ÞÀÌ µÇ´Â °ÍÀÔ´Ï´Ù. ´ÙÇེ·´°Ôµµ ÀÌ°ÍÀº ±âÁ¸ÀÇ static Á¤ÀÇ¿¡¼­ Å©°Ô ¹þ¾î³ªÁö ¾Ê´Â °³³äÀÔ´Ï´Ù. Áï,

 

  1. static º¯¼ö´Â ÇÑ ¹ø »ý¼ºµÇ¸é ÇÁ·Î±×·¥ Á¾·á ½Ã±îÁö °è¼Ó À¯ÁöµÈ´Ù.(static storage duration)

  2. static º¯¼ö´Â scope¿¡ ¿µÇâÀ» ¹Þ´Â´Ù.

    - Àü¿ª °´Ã¼´Â Á¤ÀÇµÈ ÆÄÀÏ scope¿¡ ÇÑÁ¤µÇ¾î ÂüÁ¶ °¡´ÉÇϸç(internal linkage), Áö¿ª °´Ã¼´Â Á¤ÀÇµÈ local scope¿¡ ÇÑÁ¤µÇ¾î ÂüÁ¶ °¡´ÉÇÏ´Ù.(no linkage)

 

static Ŭ·¡½º ¸â¹ö º¯¼ö´Â À§ÀÇ Á¤ÀÇ¿¡¼­ 1¹ø°ú ÀÏÄ¡Çϸç 2¹øÀÇ °æ¿ì ¿µÇâ ¹Þ´Â scope¸¦ Ŭ·¡½º À̸§°ø°£(namespace)¶ó´Â °ÍÀ¸·Î È®ÀåÇÏ¿© »ý°¢ÇÏ¸é ¿ª½Ã ¹®Á¦µÉ °ÍÀÌ ¾ø½À´Ï´Ù.

°á±¹ static Ŭ·¡½º ¸â¹ö º¯¼ö´Â °´Ã¼¿Í »ó°ü¾øÀÌ Å¬·¡½º ¹üÀ§ ¿¬»êÀÚ(::)¸¦ ÅëÇؼ­ ÂüÁ¶°¡ °¡´ÉÇÑ µ¶Æ¯ÇÑ Æ¯Â¡À» °¡Áø Àü¿ª °´Ã¼°¡ µÇ¾úÀ¸¸ç µ¿½Ã¿¡ '°´Ã¼°¡ ¸î °³°¡ »ý¼ºµÇµç ¿ÀÁ÷ Çϳª¸¸ Á¸ÀçÇÔ(singleton)'À̶ó´Â ¼ºÁúÀ» °¡Áö°Ô µÇ¾ú½À´Ï´Ù.

½ÇÁ¦ ÇÁ·Î±×·¡¹Ö¿¡¼­ static ¸â¹ö º¯¼ö´Â ¾î¶² Ŭ·¡½º¿¡ °ü·ÃµÇÁö¸¸ ƯÁ¤ °´Ã¼¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â ¼ºÁúÀ» °¡Áø µ¥ÀÌÅ͸¦ Ãë±ÞÇϴµ¥ ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëµË´Ï´Ù. reference counter°¡ ±× ´ëÇ¥ÀûÀÎ ¿¹¶ó ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÑÆí Ŭ·¡½º ¸â¹ö ÇÔ¼ö´Â ´Ù¸¥ °æ¿ì°¡ µË´Ï´Ù. ÇÔ¼ö¶ó´Â °ÍÀº ¾îÂ÷ÇÇ storage durationÀ̶ó´Â °ÍÀÌ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÏ¹Ý ÇÔ¼öÀÇ °æ¿ì static, non-staticÀÇ ±¸ºÐÀÌ 'internal linkageÀΰ¡ ¾Æ´Ï¸é external linkageÀΰ¡'·Î °áÁ¤ÀÌ µË´Ï´Ù.

¿©±â¼­ Ŭ·¡½º ¸â¹ö ÇÔ¼öÀÇ °æ¿ì´Â internal linkage¶ó´Â °ÍÀÌ Å« Àǹ̰¡ ¾ø½À´Ï´Ù. ¾îÂ÷ÇÇ privateÀ̳ª protected¿Í °°Àº ±ÇÇÑ ÁöÁ¤ Å°¿öµå°¡ Àֱ⠶§¹®¿¡ ¾ó¸¶µçÁö »ç¿ë ¹üÀ§¿¡ Á¦ÇÑÀ» °¡ÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. µû¶ó¼­ ÀÌ°Í ¿ª½Ã µÎ °¡Áö ¼±Åà »çÇ×ÀÌ Á¸ÀçÇÏ°Ô µË´Ï´Ù. ¸â¹ö ÇÔ¼ö¿¡ ´ëÇؼ­ staticÀ» Çã¿ëÇÏ´À³Ä ±×·¸Áö ¾Ê´À³Ä...C++´Â ¿ª½Ã Çã¿ëÇÏ´Â ÂÊ¿¡ ¼ÕÀ» µé¾î ÁÝ´Ï´Ù.

»ç½Ç staticÀ̶ó´Â Å°¿öµå´Â ±âº»ÀûÀ¸·Î ¸ðµç ¼±¾ð¹® Çü½Ä¿¡ µé¾î°¥ ¼ö ÀÖ´Â storage class specifier¶ó°í ÇÏ´Â ÁöÁ¤ÀÚÀÇ ÀÏÁ¾À̱⠶§¹®¿¡(C¿¡¼­ ±×·¸°Ô Á¤ÀÇÇ߱⠶§¹®¿¡) ÀÚ²Ù ÀÌ·± Àú·± Á¦¾àÀ» °¡ÇÏ´Â °ÍÀº CÀÇ ÀÚÀ¯·Î¿î ¹®¹ýÀ» °è½ÂÇÑ C++ ÀÔÀå¿¡¼­ ±×´ÙÁö ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù¶ó°í »ý°¢ÇßÀ» °ÍÀÔ´Ï´Ù.

¾î·µç ¸â¹ö ÇÔ¼ö¿¡ staticÀ» Çã¿ëÇÏ¿´°í ±×¿¡ µû¸¥ ¾î¶² ÀÇ¹Ì ºÎ¿©°¡ ÇÊ¿äÇÏ¿´½À´Ï´Ù.(¾Õ¼­ ¸»ÇÑ ´ë·Î internal linkage¶ó´Â ¼ºÁúÀº Å« Àǹ̰¡ ¾øÀ¸¹Ç·Î...)

¿©±â¼­ C++Àº ¸â¹ö º¯¼ö°¡ °´Ã¼¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â Ŭ·¡½º À̸§ °ø°£¿¡ ¼ÓÇÑ Àü¿ª °´Ã¼·Î½á Ãë±ÞµÇ¾úµíÀÌ ¸â¹ö ÇÔ¼ö ¿ª½Ã µ¿ÀÏÇÑ ¼ºÁúÀ» ºÎ¿©ÇÏ°Ô µË´Ï´Ù. Áï, static ¸â¹ö ÇÔ¼ö´Â °´Ã¼°¡ ¾ø¾îµµ È£ÃâÀÌ °¡´ÉÇÏ¸ç ´ÜÁö Ŭ·¡½º À̸§ °ø°£¿¡ ÇÑÁ¤À» ¹Þ´Â ÇÔ¼ö°¡ µÈ °ÍÀÔ´Ï´Ù. µû¶ó¼­ static ¸â¹ö ÇÔ¼ö´Â ´Ù¸¥ ¸â¹ö ÇÔ¼öó·³ this Æ÷ÀÎÅ͸¦ ¾Ï½ÃÀûÀ¸·Î ¹Þ´Â Ư¼ºÀÌ ¾øÀÌ ÀÏ¹Ý ÇÔ¼ö¿Í ¶È°°Àº È£Ãâ ±¸Á¶¸¦ °¡Áö°Ô µÇ¾ú½À´Ï´Ù. °á±¹

 

class StaticClass

  {

  public:

    static int x_;

    static int func() {};

  }

 

ÀÌ°ÍÀº

 

namespace gimmesilver

  {

  extern int x;

  int func() {};

  }

 

ÀÌ°Í°ú °ÅÀÇ µ¿ÀÏÇÑ Æ¯¼ºÀ» °¡Áý´Ï´Ù. µû¶ó¼­ non-static ¸â¹ö ÇÔ¼öµéÀº ¾Ï¹¬ÀûÀ¸·Î ³Ñ°Ü¹ÞÀº this Æ÷ÀÎÅ͸¦ ÅëÇؼ­ ÇØ´ç °´Ã¼ÀÇ ¸â¹ö º¯¼ö³ª ´Ù¸¥ non-static ¸â¹ö ÇÔ¼ö¸¦ ÂüÁ¶/È£ÃâÇÒ ¼ö ÀÖÁö¸¸ static ¸â¹ö ÇÔ¼öµéÀº ±×·¯ÇÑ ÂüÁ¶ÇÒ ¸¸ÇÑ °´Ã¼ Æ÷ÀÎÅÍ°¡ ¾øÀ¸¹Ç·Î °´Ã¼ÀÇ ¸â¹ö º¯¼ö³ª non-static ¸â¹ö ÇÔ¼ö¸¦ ÂüÁ¶/È£ÃâÇÒ ¼ö ¾ø´Â °ÍÀÔ´Ï´Ù.(ÀÌ°Í ¿ª½Ã Ãʺ¸ÀÚµéÀÌ ÈçÈ÷ ÇÏ´Â ½Ç¼öÀÔ´Ï´Ù.)

 

Post face

Á¤¸® µé¾î°©´Ï´Ù...

 

static º¯¼ö

  1. static storage durationÀ» °®´Â´Ù.

  2. scopeÀÇ ¿µÇâÀ» ¹Þ´Â´Ù.

           - Àü¿ª º¯¼ö : file scopeÀÇ ¿µÇâÀ» ¹ÞÀ¸¸ç internal linkage¶ó°í ÇÑ´Ù.

           - Áö¿ª º¯¼ö : block scopeÀÇ ¿µÇâÀ» ¹Þ´Â´Ù.

           - Ŭ·¡½º ¸â¹ö º¯¼ö : Ŭ·¡½º À̸§°ø°£ÀÇ ¿µÇâÀ» ¹Þ´Â Àü¿ª °´Ã¼ÀÌ´Ù.

   

static ÇÔ¼ö

  1. ÀÏ¹Ý ÇÔ¼ö : internal linkage¸¦ °®´Â´Ù. Áï, ¿ÜºÎ ÆÄÀÏ¿¡¼­ ÇØ´ç ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¸øÇÑ´Ù.

2. Ŭ·¡½º ¸â¹ö ÇÔ¼ö : this Æ÷ÀÎÅ͸¦ °®Áö ¾Ê´Â´Ù. µû¶ó¼­ °´Ã¼ÀÇ ¸â¹ö º¯¼ö³ª ¸â¹ö ÇÔ¼ö¸¦ Á÷Á¢ ÂüÁ¶/È£ÃâÇÒ ¼ö ¾ø´Ù. ´Ü, °°Àº Ŭ·¡½ºÀÇ static ¸â¹ö º¯¼ö³ª static ¸â¹ö ÇÔ¼ö´Â Á÷Á¢ ÂüÁ¶/È£ÃâÀÌ °¡´ÉÇÏ´Ù.

 

¾²´Ù º¸´Ï ÁÖÀú¸® ÁÖÀú¸® ±ÛÀÌ ³Ê¹« ±æ¾îÁ³½À´Ï´Ù. ºÎµð ÀÌ ±ÛÀ» ÅëÇؼ­ static¿¡ ´ëÇÑ °³³ä ÀÌÇØ¿¡ µµ¿òÀÌ µÇ¼ÌÀ¸¸é ÁÁ°Ú½À´Ï´Ù.

Ȥ½Ã ³»¿ë Áß¿¡ À߸øµÈ ³»¿ëÀ̳ª ÀÌ»óÇÑ ºÎºÐÀÌ ÀÖÀ¸¸é ±ÍÂúÀ¸½Ã´õ¶óµµ ¸ÞÀÏ ÁÖ½Ã¸é °¨»ç µå¸®°Ú½À´Ï´Ù.

 

±Û¾´ÀÌ: ÀÌÀºÁ¶(gimmesilver@hanmail.net)