[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(1)

2025. 11. 27. 18:56ยท๐Ÿ› ๏ธBackend/โš™๏ธC

โœ… 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 ๊ณผ ๊ฐ™์€ ํ™”์‚ดํ‘œ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŽธ๋ฆฌํ•จ. ( ๋‘˜ ๋‹ค ๋™์ž‘์€ ๋™์ผํ•จ. )

'๐Ÿ› ๏ธBackend > โš™๏ธC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(2)  (0) 2025.11.29
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(3)  (0) 2025.11.26
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(2)  (0) 2025.10.17
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(1)  (0) 2025.10.16
[C์–ธ์–ด] ํ•จ์ˆ˜์™€ ๊ธฐ์–ต ํด๋ž˜์Šค(2)  (0) 2025.10.15
'๐Ÿ› ๏ธBackend/โš™๏ธC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(2)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(3)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(2)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(1)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (195) N
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (51) N
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก  (15)
        • ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ (13) N
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
      • ๐Ÿ› ๏ธBackend (68)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (23)
        • ๐ŸŒณSpring (13)
        • โš™๏ธC (12)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (64)
      • ์ •๋ณด (2)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐฐ์—ด
    ์ž๋ฃŒ๊ตฌ์กฐ
    Java
    C ์–ธ์–ด
    Python
    ์ž๋ฐ”
    ๋ฐฉ์†ก๋Œ€
    ์ž…์ถœ๋ ฅ
    ํŒŒ์ด์ฌ
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    ์ปดํŒŒ์ผ๋Ÿฌ
    ํ•จ์ˆ˜
    ๋ฐฉํ†ต๋Œ€
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก 
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    spring
    C
    C์–ธ์–ด
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(1)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”