extern (๊ณ ๊ธ)
Static ๋ณ์์ Extern ๋ณ์๋ C์ธ์ด์์ ๋ณ์์ ์ค์ฝํ(visibility)์ ์๋ช ์ฃผ๊ธฐ(lifetime)๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํค์๋์ด๋ค. ์ด ๋์ ์ฃผ์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
Static ๋ณ์:
- ์ค์ฝํ: Static ๋ณ์๋ ์ ์ธ๋ ๋ฒ์(ํจ์ ๋ด๋ถ ๋๋ ํ์ผ ๋ด๋ถ)์ ์ ํ๋๋ค.
- ์๋ช ์ฃผ๊ธฐ: ํ๋ก๊ทธ๋จ ์คํ ์์ ์ ํ ๋น๋๊ณ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ ํด์ ๋๋ค.
- ๋ชฉ์ : ๊ฐ์ ํ์ผ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ๋ณ์๋ฅผ ๋ง๋ค๊ฑฐ๋, ํจ์ ํธ์ถ ๊ฐ ์ํ๋ฅผ ์ ์งํ ์ ์๋ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
Extern ๋ณ์:
- ์ค์ฝํ: Extern ํค์๋๋ ๋ค๋ฅธ ํ์ผ์ ์ ์๋ ์ ์ญ ๋ณ์๋ ํจ์๋ฅผ ์ฐธ์กฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ์๋ช ์ฃผ๊ธฐ: ํด๋น ๋ณ์๊ฐ ์ ์๋ ํ์ผ ๋ด์์ ํ๋ก๊ทธ๋จ ์คํ ์์ ์ ํ ๋น๋๊ณ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ ํด์ ๋๋ค.
- ๋ชฉ์ : ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ํ์ผ๋ค ๊ฐ์ ๊ณต์ ๋๋ ์ ์ญ ๋ณ์์ ์ ๊ทผํ๊ฑฐ๋, ๋ค๋ฅธ ํ์ผ์ ์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
โญ1. Static ๋ณ์
static_example.c
#include <stdio.h>
void incrementCounter() {
static int counter = 0; // static ์ง์ญ ๋ณ์
counter++;
printf("Counter: %d\n", counter);
}
int main() {
incrementCounter(); // ์ถ๋ ฅ: Counter: 1
incrementCounter(); // ์ถ๋ ฅ: Counter: 2
return 0;
}
์ด ์์์์ counter ๋ณ์๋ incrementCounter ํจ์ ๋ด์ static์ผ๋ก ์ ์ธ๋์ด ์๋ค. ๋ฐ๋ผ์ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค counter์ ๊ฐ์ ์ ์ง๋๋ฉฐ, ํจ์์ ์คํ์ด ๋๋๋ counter์ ๊ฐ์ ์ฌ๋ผ์ง์ง ์๋๋ค.
โญ2. Extern ๋ณ์
shared_var.c
int sharedVar = 10; // ๋ค๋ฅธ ํ์ผ์์ ์ ๊ทผํ ์ ์ญ ๋ณ์
main.c
#include <stdio.h>
extern int sharedVar; // ๋ค๋ฅธ ํ์ผ์ ์ ์๋ ์ ์ญ ๋ณ์๋ฅผ ์ฐธ์กฐ
int main() {
printf("Shared Variable: %d\n", sharedVar); // ์ถ๋ ฅ: Shared Variable: 10
return 0;
}
์ด ์์์์ counter ๋ณ์๋ incrementCounter ํจ์ ๋ด์ static์ผ๋ก ์ ์ธ๋์ด ์๋ค. ๋ฐ๋ผ์ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค counter์ ๊ฐ์ ์ ์ง๋๋ฉฐ, ํจ์์ ์คํ์ด ๋๋๋ counter์ ๊ฐ์ ์ฌ๋ผ์ง์ง ์๋๋ค.
sharedVar ๋ณ์๋ shared_var.c ํ์ผ์ ์ ์ญ ๋ณ์๋ก ์ ์๋์ด ์์ผ๋ฉฐ, main.c์์๋ extern ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ค. ์ด๋ฅผ ํตํด main.c ํ์ผ ๋ด์์ sharedVar ๋ณ์์ ๊ฐ์ ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
Static ๋ณ์์ Extern ๋ณ์๋ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๋ค. Static ๋ณ์๋ ์ฃผ๋ก ํจ์ ๋ด๋ถ์์ ์ํ๋ฅผ ์ ์งํ๊ฑฐ๋, ํ์ผ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค. ๋ฐ๋ฉด, Extern ๋ณ์๋ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ํ์ผ ๊ฐ์ ๊ณต์ ๋์ด์ผ ํ๋ ์ ์ญ ๋ณ์์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
'๐ท C์ธ์ด 30๊ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++ Tip] 19. C์ธ์ด ์กฐ๊ฑด๋ฌธ ๋ง์คํฐํ๊ธฐ : ์ผํญ์ฐ์ฐ์ (0) | 2024.11.05 |
---|---|
[C/C++ Tip] 18. C์ธ์ด ์กฐ๊ฑด๋ฌธ ๋ง์คํฐํ๊ธฐ : if๋ฌธ์ ๋ชจ๋ ๊ฒ! (0) | 2024.11.05 |
[C/C++ Tip] 16. Extern ์ค๋ณต ๋ฌธ์ ํด๊ฒฐ (Include Guard) (0) | 2024.11.02 |
[C/C++ Tip] 15. extern ๊ธฐ๋ณธ (0) | 2024.11.02 |
[C/C++ Tip] 14. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (0) | 2024.10.29 |