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¿¡ ´ëÇÑ °³³ä ÀÌÇØ¿¡ µµ¿òÀÌ µÇ¼ÌÀ¸¸é ÁÁ°Ú½À´Ï´Ù.
Ȥ½Ã ³»¿ë
Áß¿¡ À߸øµÈ ³»¿ëÀ̳ª ÀÌ»óÇÑ ºÎºÐÀÌ ÀÖÀ¸¸é ±ÍÂúÀ¸½Ã´õ¶óµµ ¸ÞÀÏ ÁÖ½Ã¸é °¨»ç µå¸®°Ú½À´Ï´Ù.
±Û¾´ÀÌ: