๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ์ด๋ฆ ๊ณต๊ฐ
๋ถํ ์ปดํ์ผ
์๋ณธ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ ์ ์๋ค.
1. ๊ตฌ์กฐ์ฒด ์ ์ธ๊ณผ, ๊ทธ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ค์ ์ํ์ด ๋ค์ด์๋ ํค๋ ํ์ผ
2. ๊ทธ ๊ตฌ์กฐ์ฒด์ ๊ด๋ จ๋ ํจ์๋ค์ ์ฝ๋๊ฐ ๋ค์ด์๋ ์์ค์ฝ๋ ํ์ผ
3. ๊ทธ ๊ตฌ์กฐ์ฒด์ ๊ด๋ จ๋ ํจ์๋ค์ ํธ์ถํ๋ ์ฝ๋๊ฐ ๋ค์ด์๋ ์์ค์ฝ๋ ํ์ผ
ํํ ํค๋ ํ์ผ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๋ฃ๋๋ค.
1. ํจ์ ์ํ
2. #define์ด๋ const๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ ๊ธฐํธ ์์
3. ๊ตฌ์กฐ์ฒด ์ ์ธ
4. ํด๋์ค ์ ์ธ
5. ํ ํ๋ฆฟ ์ ์ธ
6. ์ธ๋ผ์ธ ํจ์
ํ์ผ ์ด๋ฆ์ด ๊ดํธ๋ก ๋ฌถ์ฌ์์ผ๋ฉด, ์ปดํ์ผ๋ฌ๋ ํ์ค ํค๋ ํ์ผ๋ค์ด ๋ค์ด์๋ ํธ์คํธ ์์คํ ์ ํ์ผ ์์คํ ์์ญ์์ ๊ทธ๊ฒ์ ์ฐพ๋๋ค. ๊ทธ๋ฌ๋ ํฐ ๋ฐ์ดํ๋ก ๋ฌถ์ฌ์์ผ๋ฉด, ์ปดํ์ผ๋ฌ๋ ๋จผ์ ํ์ฌ ์์ ๋ํ ํ ๋ฆฌ๋ ์์ค์ฝ๋ ๋ํ ํ ๋ฆฌ์์ ๊ทธ๊ฒ์ ์ฐพ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ๋ง๋ ํค๋ ํ์ผ์ ํฌํจ์ํฌ ๋๋ ๊ดํธ ๋์ ํฐ ๋ฐ์ดํ ์ฌ์ฉ
#include<coordin.h> -> "coordin.h>
๊ธฐ์ต ์กด์ ์๊ฐ, ์ฌ์ฉ๋ฒ์, ๋งํฌ
c++์ ๋ค ๊ฐ์ง ์ ํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
1. ์๋ ๊ธฐ์ต ์กด์ ์๊ฐ(automatic storage duration)
ํจ์ ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ์ฌ, ํจ์ ์ ์ ์์ ์ ์ธ๋ ๋ณ์๋ ์๋ ๊ธฐ์ต ์กด์ ์๊ฐ์ ๊ฐ์ง๋ค.
ํ๋ก๊ทธ๋จ ์คํ์ด ํจ์๋ ๋ธ๋ก ์์ผ๋ก ๋ค์ด๊ฐ ๋ ์์ฑ๋จ. ๋์ ๋ ๋ฉ๋ชจ๋ฆฌ๋, ํ๋ก๊ทธ๋จ ์คํ์ด
ํจ์๋ ๋ธ๋ก์ ๋ ๋ ๋ ํด์ ๋จ c++์ ๋ ์ข ๋ฅ์ ์๋ ๋ณ์๋ฅผ ๊ฐ์ง๋ค.
2. ์ ์ ๊ธฐ์ต ์กด์ ์๊ฐ(static storage duration)
ํจ์ ์ ์์ ๋ฐ๊นฅ์์ ์ ์ธ๋ ๋ณ์ ๋๋ ํค์๋ static์ ์ฌ์ฉํ์ฌ ์ ์๋ ๋ณ์.
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ ์ฒด ์๊ฐ ๋์ ์กด์๋๋ค. c++์ ์ธ ์ข ๋ฅ์ ์ ์ ๋ณ์๋ฅผ ๊ฐ์ง
3. ์ฐ๋ ๋ ์กด์ ์๊ฐ(Thread Storage duration)
๋ฉํฐ์ฝ์ด ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ ์์ ์ ์ฐ๋ ๋ ๋จ์๋ก ์ชผ๊ฐ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
4. ๋์ ๊ธฐ์ต ์กด์ ์๊ฐ(dynamic storage duration)
new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๋ ๋ฉ๋ชจ๋ฆฌ๋, delete ์ฐ์ฐ์๋ก ํด์ ๋๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ์กด์ํจ
์ฌ์ฉ ๋ฒ์์ ๋งํฌ
์ฌ์ฉ ๋ฒ์(scope) : ์ด๋ค ์ด๋ฆ์ด ํ๋์ ํ์ผ ์์์ ์ผ๋ง๋ ๋๋ฆฌ ์๋ ค์ ธ ์๋๊ฐ๋ฅผ ๋ํ๋
ex) ํจ์ ์์์ ์ ์๋ ๋ณ์๋ ๊ทธ ํจ์ ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
๋งํฌ(linkage): ์๋ก ๋ค๋ฅธ ๋ฒ์ญ ๋จ์๋ค์ด ์ด๋ฆ์ ๊ณต์ .
์ธ๋ถ ๋งํฌ(external linkage)๋ฅผ ๊ฐ์ง ์ด๋ฆ์ ์ฌ๋ฌ ํ์ผ๋ค์ด ๊ณต์ ๊ฐ๋ฅ
๋ด๋ถ ๋งํฌ(internal linkage)๋ฅผ ๊ฐ์ง ์ด๋ฆ์ ํ ํ์ผ ์์ ์๋ ํจ์๋ค๋ง ๊ณต์ ๊ฐ๋ฅ. ์๋ ๋ณ์๋ ๊ณต์ ๋์ง ์์.
์๋ ๋ณ์
ํจ์ ๋งค๊ฐ๋ณ์์, ํจ์ ์์์ ์ ์ธ๋ ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๊ธฐ์ต ์กด์ ์๊ฐ์ ๊ฐ์ง. ์ง์ญ ์ฌ์ฉ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ, ๋งํฌ๋ ์์ ์๋ฅผ ๋ค์ด main() ์์ texas๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , oil()์ด๋ผ๋ ํจ์ ์์์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ฉด, ์๋ก ๋ ๋ฆฝ์ ์ด๋ฉด์ ์์ ์ด ์ ์๋ ํจ์ ์์์๋ง ์๋ ค์ง๋ ๋ณ์ ์์ฑ
์ ์ ๋ณ์
c++๋, ์ธ ๊ฐ์ง ์ ํ์ ๋งํฌ(์ธ๋ถ๋งํฌ,๋ด๋ถ๋งํฌ,๋งํฌ์์)๋ฅผ ๊ฐ์ง๋, ์ ์ ๋ณ์๋ฅผ ์ ๊ณตํ๋ค.
์ธ๊ฐ์ง ์ ํ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ ์ฒด ์๊ฐ ๋์ ์กด์ํ๋ค. ์ ์ ๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ด๊ธฐํํ์ง ์์ผ๋ฉด,
์ปดํ์ผ๋ฌ๋ ๊ทธ๊ฒ๋ค์ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํ.
์ธ๋ถ ๋งํฌ๋ฅผ ๊ฐ์ง๋ ์ ์ ๋ณ์: ์ด๋ค ๋ธ๋ก์๋ ์ํ์ง ์๋ ์์ ํ ๋ฐ๊นฅ์ ์ ์ธ
๋ด๋ถ ๋งํฌ๋ฅผ ๊ฐ์ง๋ ์ ์ ๋ณ์: ์ด๋ค ๋ธ๋ก์๋ ์ํ์ง ์๋ ๋ฐ๊นฅ์์ ์ ์ธํ๋, static ๊ธฐ์ต ๊ณต๊ฐ ์ ํ์๋ฅผ ์ ์ธ ์์ ๋ถ์
๋งํฌ๊ฐ ์๋ ์ ์ ๋ณ์:static์ ์ฌ์ฉํ์ฌ ๋ธ๋ก ์์์ ์ ์ธ
๊ธฐ์ต๊ณต๊ฐ | ๊ธฐ์ต ์กด์ ์๊ฐ | ์ฌ์ฉ ๋ฒ์ | ๋งํฌ | ์ ์ธ๋ฐฉ๋ฒ |
์๋ | ์๋ | ๋ธ๋ก | ์์ | ๋ธ๋ก ์์ |
๋ ์ง์คํฐ | ์๋ | ๋ธ๋ก | ์์ | ๋ธ๋ก ์์(register ์ฌ์ฉ) |
๋งํฌ ์๋ ์ ์ | ์ ์ | ๋ธ๋ก | ์์ | ๋ธ๋ก ์์(static ์ฌ์ฉ) |
์ธ๋ถ ๋งํฌ ์ ์ | ์ ์ | ํ์ผ | ์ธ๋ถ | ํจ์์ ๋ฐ๊นฅ์ |
๋ด๋ถ ๋งํฌ ์ ์ | ์ ์ | ํ์ผ | ๋ด๋ถ | ํจ์์ ๋ฐ๊นฅ์(static ์ฌ์ฉ) |
์ ์ ๋ณ์ ์ด๊ธฐํ
์ ๋ก ์ด๊ธฐํ: ๋ณ์๋ฅผ ์ ๋ก(=0)์ ์ธํ ์ํค๋ ๊ฒ
์ ๋ก ๊ฐ์ ์ ์ ํ ํ์ ์ ๋ํ ํ์ ์บ์คํธ์ด๋ค.
๋ชจ๋ ์ ์ ๋ณ์๋ ์ฐ์ , ์ ๋ก ์ด๊ธฐํ๊ฐ ๋๋ค. ๊ทธ ํ ํ์์ ๋จ์ ๊ณ์ฐ์ ํ ์ ์๋๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ค๋น๋จ
์ ์ ์กด์ ์๊ฐ, ์ธ๋ถ ๋งํฌ
์ธ๋ถ ๋ณ์๋ ์ ์ ์ ์ฅ ๊ธฐ๊ฐ๊ณผ ํ์ผ ๋ฒ์๋ฅผ ์ง๋๋ค.
๋จ์ผ ์ ์ ์์น
c++์ ๋ ์ข ๋ฅ์ ๋ณ์ ์ ์ธ์ ํ๋ค.
์ฒซ์งธ๋ ์ ์ธ์ ์ ์ํ๋ ๊ฒ ๋๋ ๋จ์ํ๊ฒ ์ ์๋ก, ๋์ ๋๋ ๋ณ์์ ๋ํ์ฌ ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ค.
๋์งธ๋ ์ฐธ์กฐ ์ ์ธ ํน์ ๋จ์ํ ์ ์ธํ๋ ๊ฒ์ธ๋ฐ, ์ด ๊ฒฝ์ฐ์ ๊ธฐ์กด์ ๋ณ์๋ฅผ ์๋ฏธํ๋ฏ๋ก ์ ์ฅ์๋ฅผ ์์ฑํ์ง ์์
์ฐธ์กฐ ์ ์ธ์ extern์ด๋ผ๋ ํค์๋๋ฅผ ์ ๊ณตํ๊ณ ์ด๊ธฐํ๋ฅผ ์ ๊ณตํ์ง ์์.
double up; //์ ์, up์ 0
extern int blem; //blem์ ๋ค๋ฅธ ์ง์ญ์์ ์ ์๋จ
extern char gr='z'; //์ด๊ธฐํ๋๋ฏ๋ก ์ ์ธ์ด๋ค.
๋ง์ฝ ์ฌ๋ฌ ํ์ผ์์ ์ธ๋ถ ๋ณ์๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ์ค์ง ํ ๊ฐ์ ํ์ผ์ด ๊ทธ ๋ณ์์ ๋ํ ์ ์๋ฅผ ์ง๋ผ ์ ์๋ค.
๊ทธ๋ฌ๋, ๊ทธ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋ ํ์ผ๋ค์ ๊ทธ ๋ณ์๋ฅผ extern ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํจ.
ex)file01.cpp
extern int cats=20; //์ด๊ธฐํ๋๋ฏ๋ก ์ ์
int dogs=22;//์ ์์ ํด๋น
int fleas;//์ ์์ ํด๋น
...
//file02.cpp
//file01.cpp๋ก๋ถํฐ cats ๋ณ์์ dogs ๋ณ์๋ฅผ ์ฌ์ฉํด๋ผ
extern int cats; //file01.cpp๊ฐ ์ฌ์ฉ๋๋ฏ๋ก ์ ์๊ฐ ์๋
extern int dogs; //extern์ ํด๋น๋๋ฉฐ ์ด๊ธฐํ๋์ง ์๋๋ค.
...
extern int cats;
extern int dogs;
extern int fleas;
...
์ด ๊ฒฝ์ฐ, ๋ชจ๋ ํ์ผ์ file01.cpp์ ์๋ cats ๋ณ์์ dogs ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ file02.cpp๋ fleas ๋ณ์๋ฅผ ์ฌ์ ์ธ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ํ ์ ์๋ค.
์ฌ์ฉ๋ฒ์ ๊ฒฐ์ ์ฐ์ฐ์(scope resolution operator)
:: ์ฐ์ฐ์๋ฅผ ๋ณ์ ์ด๋ฆ ์์ ๋ถ์ด๋ฉด ๊ทธ ๋ฒ์์ ์ ์ญ ๋ฒ์ ์ ์ฌ์ฉํ๋ผ๋ ๋ป์ด ๋๋ค.