โ
1. ๊ตฌ์กฐ์ฒด์ ๊ฐ๋
(1) ๊ตฌ์กฐ์ฒด(structure) ๋?
๋ค์์ ์๋ฃ๋ฅผ ๋ชจ์ ์๋ก์ด ์๋ฃํ์ ์ ์ํ ๊ฒ์ ์๋ฏธํจ. ( ์ฌ์ฉ์ ์ ์ ์๋ฃํ )
๋ฐฐ์ด : ํ๋์ ์๋ฃํ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ ์ฌ๋ฌ ์๋ฃ๋ค์ ๋ฌถ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ตฌ์กฐ์ฒด : ๊ฐ ์๋ฃ๊ฐ ์ฌ๋ฌ๊ฐ์ง ์๋ฃํ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ ์ดํ ๋ฐฐ์ด๋ก ๋ณผ ์ ์์.
๊ตฌ์กฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ์๋ฃ๋ฅผ ๊ตฌ์กฐ์ฒด์ '๋ฉค๋ฒ ' ๋ผ๊ณ ํ๋ค.
๊ฐ๊ฐ์ ๋ฉค๋ฒ์๋ ๋ช
์นญ์ด ์ง์ ์ด ๋๋ค. ( ๋ช
์นญ(๋ฉค๋ฒ ๋ณ์๋ช
) ์ ์ด์ฉํ์ฌ ๋ฉค๋ฒ๋ฅผ ์ก์ธ์ค ํจ. )
(2) ๊ตฌ์กฐ์ฒด(structure) ์์
ํ๋์ ๊ฐ์ฒด๋ ์์ ๊ฐ์ ๊ตฌ์กฐ์ฒด๋ก ๋ง๋ค ์ ์์.
โ
2. ๊ตฌ์กฐ์ฒด์ ์ ์์ ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ
(1) ๊ตฌ์กฐ์ฒด - ์ ์ ํ์
๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ ํ ๋์๋ ์์ ๊ฐ์ struct ํค์๋์ ๊ตฌ์กฐ์ฒด๋ช
์ ์ ์ํ๊ณ ์ค๊ดํธ ์์ ์๋ฃํ๊ณผ ๋ฉค๋ฒ๋ฅผ ์ ์ธํจ.
(2) ๊ตฌ์กฐ์ฒด - ๋ณ์ ์ ์ธ
๊ตฌ์กฐ์ฒด ๋ณ์ : ๊ตฌ์กฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ํ ์ฐธ์กฐ ์๋ฃํ์ผ๋ก ๋ณผ ์ ์์.
๋ํ, ๊ตฌ์กฐ์ฒด ๋ณ์๋ ์ฌ๋ฌ๊ฐ ์ ์ธ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ๊ฐ ๋
๋ฆฝ์ ์ธ ๊ณต๊ฐ์ ๊ฐ์ง.
์ ์ธ ๋ฐฉ์์ ๊ตฌ์กฐ์ฒด์ ๋ถํ์ ์ ์ธํ๋ฉด struct ํค์๋ ์์ด ๊ฐ๋ฅํจ.
๋ํ, ๊ตฌ์กฐ์ฒด์ ๋ถํ์ง ์๋ ๊ฒฝ์ฐ struct ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ๋ฅผ ํด์ค์ผํจ.
*pCirle ๋ ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธํ ๊ฒ์ด๋ค.
(3) ๊ตฌ์กฐ์ฒด - typedef ์ ์ธ๋ฌธ์ ์ด์ฉํ ์๋ฃํ ์ ์ธ
#include <stdio.h>
typedef struct Person {
int age;
char name[20];
} Person;
struct Human {
int age;
char name[20];
} Human, a, b; // ์ฌ์ฉ ํ ๋ ๋ง๋ค ์์ ์ ์ธํด์ค์ผํจ.
int main() {
Person p1;
Human h1; // error
Human; // ok
}
typedef ๋ก ๋ณ์นญ์ ์ ์ธํด์ฃผ๋ฉด, ๊ตณ์ด ๋ณ์๋ฅผ struct ์ ์ ์ธํ์ง ์์๋ ๋ด๊ฐ ์ํ๋ ๊ณณ์์ ๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ ์ธํด์ ์ด์ฉ ํ ์ ์์.
๋ํ, ๊ตฌ์กฐ์ฒด ๋ฟ๋ง ์๋๋ผ typedef ๋ ์ผ๋ฐ ๋ณ์์์๋ ๊ธฐ์กด ์๋ฃํ์ ์ฌ์ฌ์ฉ ํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉ ํ ์ ์์.
(4) ๊ตฌ์กฐ์ฒด - ๋ณ์์ ์ด๊ธฐํ
#include <stdio.h>
typedef struct Person {
int age;
int height;
} Person;
int main() {
struct Person p = {20, 3};
printf("%d", p.age);
Person p1 = {30, 5};
printf("%d", p.age);
}
tpyedef ๋ฅผ ํตํด ๋ณ์นญ์ ์ง์ด์ค ๊ตฌ์กฐ์ฒด์๋ ๋งค๋ฒ ๊ตฌ์กฐ์ฒด ๋ณ์๋ฅผ ์ ์ธ ํ ๋ ๋ง๋ค struct ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋จ.
๋ํ, typedef ๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด, ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ ์ ๋ฐ๋์ struct ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋ณ์๋ฅผ ์ ์ธ ๋ฐ ์ด๊ธฐํ ํด์ผํจ.
(5) ๊ตฌ์กฐ์ฒด - ๋ฉค๋ฒ ์ฐธ์กฐ
"." ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ์ ์์ธ์ค๋ฅผ ํ ์ ์์.
(6) ๊ตฌ์กฐ์ฒด - ๊ธฐ์ต ๊ณต๊ฐ (๊ตฌ์กฐ์ฒด ์ ๋ ฌ)
- memory cell : cpu - ex) word: 4byte
[ 0 ][ 1 ][ 2 ][ 3 ]
[int a][int a][int a][int a]
[ 4 ][ 5 ][ 6 ][ 7 ]
[char x][int b][int b][int b]
[ 8 ]
[int b]
< ์ ๋ ฌ ์ >
0~3 : int a
4~7 : char y & int b
7~ : int b -> ํ ๋ฒ๋ ์ฝ์ด์ผ์ง ๊ฐ์ ธ ์ฌ ์ ์์.
< ์ ๋ ฌ ํ >
0~3 : int a
4~7 : char y & padding
8~11 : int b
word : ์ปดํจํฐ CPU ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก 32bit (4๋ฐ์ดํธ), 64bit (8๋ฐ์ดํธ) ๋จ์๋ฅผ ๋ง์ด ์. ( CPU ํ์ฌ๋ง๋ค ๋ค๋ฆ )
๊ตฌ์กฐ์ฒด ๋ด๋ถ์ ๋ฉค๋ฒ๋ ๋ค์ํ ์๋ฃํ(ํฌ๊ธฐ)์ ๊ฐ์ง ์ ์์ด์, CPU๊ฐ word ๋จ์๋ก ์ฝ์ ๋ ํน์ ์๋ฃํ ๋จ์๋ฅผ ํ ๋ฒ์ ์ฝ์ผ๋ฉด, ๋ ๋ฒ ์ฝ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์์.
๊ทธ๋์ ๊ฒฐ๊ตญ์ ๋ฉค๋ฒ๋ฅผ ํจ์จ์ ์ผ๋ก ์ก์ธ์ค ํ๊ธฐ ์ํด์ ๋ฐ์ดํธ ๊ฒฝ๊ณ๋ฅผ ๋ง์ถฐ์ ์ ๋ ฌ์ ํ๊ฒ ๋๋ ๊ฒ์.
์์ ์ ๋ ฌ ์ ํ๋ฅผ ๋ณด๋ฉด ๊ฒฐ๊ตญ 2๋ฒ ์ฝ๋๊ฑด ๋์ผํด ๋ณด์ด์ง๋ง, ๋ค๋ฅธ ๋ถ๋ถ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌ ํด๋์์ผ๋ก์จ, ๋นํธ๋ฅผ ํฉ์น์ง ์์๋ ๋๋ค๋ ๋งค์ฐ ํฐ ์ฅ์ ์ด ์์. ( ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํ์ ๋ฎ์ถ๊ณ , ๋นํธ ์กฐํฉ ์์
์ ๊ฑฐ๋ฅผ ํ ์ ์์. )
์ฆ, ์์ ๊ฐ์ด sizeof ๋ฅผ ํตํด์ ํด๋น ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ๋ฅผ ๋ฐํ ๋ฐ์ผ๋ฉด ๊ฒฐ๊ณผ๋ padding ์ ํฌํจํ ํฌ๊ธฐ์ 12 byte ๊ฐ ๋์ด.
(7) ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด - ์ ์ธ
์์ ๊ฐ์ด, ๊ตฌ์กฐ์ฒด ์์ฒด๋ฅผ ๋ฐฐ์ด์ ๋ด์ ์ ์์.
(8) ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด - ๋ฉค๋ฒ ์ฐธ์กฐ
์์ ๊ฐ์ด, ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ํ์ฉํด์ ๋ฐฐ์ด์ ์ ๊ทผํ ์ ์์.
โ
3. ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
(1) ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ - ์ ์ธ
์ฃผ์ ์ฐ์ฐ์๋ฅผ ํตํด์ ๊ตฌ์กฐ์ฒด์ ์ฃผ์๋ฅผ ์๊ณ ํฌ์ธํฐ ๋ณ์์ ์ฃผ์๋ฅผ ํ ๋น ํ ์ ์์.
(2) ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ - ๋ฉค๋ฒ ์ฐธ์กฐ
์ฐธ์กฐ ์ฐ์ฐ์์ ์ฐ์ ์์๊ฐ ํฌ์ธํฐ ์ฐ์ฐ์ ๋ณด๋ค ๋๊ธฐ ๋๋ฌธ์ ๊ดํธ๋ฅผ ๋ฌ์์ค์ผ ํจ.
๋งค๋ฒ, ํฌ์ธํฐ๋ก ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐ ํ ๋๋ง๋ค (*pPrsn).name ์ผ๋ก ์ฐธ์กฐํ๊ธฐ์๋ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ pPrsn -> name ๊ณผ ๊ฐ์ ํ์ดํ๋ก ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐ ํ ์ ์์ผ๋ฉฐ, ํธ๋ฆฌํจ. ( ๋ ๋ค ๋์์ ๋์ผํจ. )