C์–ธ์–ด

[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

hyonie 2025. 1. 18. 14:40

C์–ธ์–ด๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ๊ตฌ์กฐ์ฒด(struct)๋ผ๋Š” ๊ฐœ๋…์„ ๋งŒ๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ๋„๊ตฌ ์ธ๋ฐ์š”, ๊ทธ๋ ‡๋‹ค๋ฉด ๊ตฌ์กฐ์ฒด๋ž€ ๋ฌด์—‡์ด๊ณ , ์™œ ์‚ฌ์šฉํ• ๊นŒ์š”? ๋˜ํ•œ, ๊ตฌ์กฐ์ฒด์™€ ๋ฐฐ์—ด์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

์ด ๊ธ€์—์„œ๋Š” ๊ตฌ์กฐ์ฒด์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ๋ฐฐ์—ด๊ณผ ๊ตฌ์กฐ์ฒด์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์–ธ์ œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•œ์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 


1. ๊ตฌ์กฐ์ฒด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๊ตฌ์กฐ์ฒด๋ž€ ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ณ€์ˆ˜๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜•์„ ์ •์˜ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. 

 

๐Ÿ“– ๊ตฌ์กฐ์ฒด์˜ ์ •์˜

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•(์ •์ˆ˜ํ˜•, ์‹ค์ˆ˜ํ˜•, ๋ฌธ์žํ˜•, ํฌ์ธํ„ฐ ๋“ฑ)์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

2. ๊ตฌ์กฐ์ฒด๋Š” ์™œ ์ƒ๊ฒผ์„๊นŒ?

๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋Š” ์ ์  ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ 100๋ช…์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์ด๋ฆ„, ๋‚˜์ด, ํ‚ค ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ์ฒด๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด๋Š” ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ "ํŒจํ‚ค์ง€"์ฒ˜๋Ÿผ ๋ฌถ์–ด ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด๊ณผ ๊ตฌ์กฐ์ฒด์˜ ์ฐจ์ด ๐Ÿซง

 

๋ฐฐ์—ด๊ณผ ๊ตฌ์กฐ์ฒด๋Š” ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์„ฑ๊ฒฉ๊ณผ ์‚ฌ์šฉ ๋ชฉ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • ๋ฐฐ์—ด: ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ์ฒด: ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ) ํ•™์ƒ์˜ ์ด๋ฆ„(๋ฌธ์ž์—ด), ๋‚˜์ด(์ •์ˆ˜), ํ‚ค(์‹ค์ˆ˜)๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌ

 

3. ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๊ตฌ์กฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ์˜ ์—ฐ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

 

๊ตฌ์กฐ์ฒด ์‚ฌ์šฉ์˜ ์žฅ์ 

  • ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ด
  • ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์คŒ

 

๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽ“๊ตฌ์กฐ์ฒด ์˜ˆ์‹œ: ํ•™์ƒ ์ •๋ณด ๊ด€๋ฆฌ

๊ตฌ์กฐ์ฒด๋Š” ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๊ทธ๋ฃนํ•‘ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด์˜ ๋ณธ์งˆ์€ ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์ƒˆ๋กœ์šด ํƒ€์ž…์˜ ์ž๋ฃŒํ˜•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

C์–ธ์–ด์—์„œ ๊ตฌ์กฐ์ฒด์™€ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ํด๋ž˜์Šค๋Š” ๋ชจ๋‘ ์ž๋ฃŒํ˜• ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋ฉฐ, ๊ตฌ์กฐ์ฒด๋Š” ์ปค์Šคํ…€ ํƒ€์ž…์œผ๋กœ ํ‘œ์ค€ ํƒ€์ž…๊ณผ ์—ญํ• ์€ ๋™์ผํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋งž์ถคํ˜• ์ž๋ฃŒํ˜•์ด๋ผ๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

struct student {
  char name[10];  // ์ด๋ฆ„
  int age;        // ๋‚˜์ด
  int height;     // ํ‚ค
}

 

์ •์˜๋œ ๊ตฌ์กฐ์ฒด๋Š” ์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒํ˜•์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. name, age, height ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ฌถ์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜• student๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ student๋ผ๋Š” ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ๊ฐ ํ•™์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ "ํŒจํ‚ค์ง€"๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

struct student st1, st2; // ํ•™์ƒ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋‘ ๊ฐœ์˜ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜ ์„ ์–ธ

 

 

์œ„ ๊ทธ๋ฆผ์—์„œ st1๊ณผ st2๋Š” ๊ฐ๊ฐ name, age, height๋ฅผ ํฌํ•จํ•œ 18๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

 

๐Ÿฐ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„์˜ ํฌ๊ธฐ(struct student)

  • char name[10]: char๋Š” 1๋ฐ”์ดํŠธ ์ž๋ฃŒํ˜•์ด๊ณ  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 10์ด๋ฏ€๋กœ 10๋ฐ”์ดํŠธ
  • int age: int๋Š” 4๋ฐ”์ดํŠธ
  • int height: int๋Š” 4๋ฐ”์ดํŠธ

 

4. ๊ตฌ์กฐ์ฒด ๋ฌธ๋ฒ•๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ๊ตฌ์กฐ์ฒด์˜ ์ •์˜

struct ๊ตฌ์กฐ์ฒด์ด๋ฆ„{
  ์ž๋ฃŒํ˜• ๋ฉค๋ฒ„1;
  ์ž๋ฃŒํ˜• ๋ฉค๋ฒ„2;
  ...
};

 

  • struct ํ‚ค์›Œ๋“œ: ๊ตฌ์กฐ์ฒด ์ž๋ฃŒํ˜•์ž„์„ ๋‚˜ํƒ€๋ƒ„
  • ๊ตฌ์กฐ์ฒด ์ด๋ฆ„: ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜• ์ด๋ฆ„
  • ๋ฉค๋ฒ„: ๊ตฌ์กฐ์ฒด์— ํฌํ•จ๋œ ๋ณ€์ˆ˜๋“ค

2๏ธโƒฃ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜ ์„ ์–ธ

struct ๊ตฌ์กฐ์ฒด์ด๋ฆ„ ๋ณ€์ˆ˜๋ช…;

3๏ธโƒฃ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜๊ธฐ

๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„๋Š” ์ง์ ‘ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž .๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๋ช….๋ฉค๋ฒ„์ด๋ฆ„

 

์˜ˆ) 

st1.name = "hyonie"; // st1์˜ name์— ๊ฐ’ ํ• ๋‹น
st1.age = 20;        // st1์˜ age์— ๊ฐ’ ํ• ๋‹น
st1.heigth = 170;    // st1์˜ height์— ๊ฐ’ ํ• ๋‹น

 

4๏ธโƒฃ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•œ ๊ฐ„์ ‘ ์ ‘๊ทผ

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„์ ‘ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž -> ๋ฅผ ํ†ตํ•ด ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

struct student *ptr = &st1;  // st1์˜ ์ฃผ์†Œ๋ฅผ ํฌ์ธํ„ฐ์— ์ €์žฅ
ptr -> age = 21;             // ํฌ์ธํ„ฐ๋กœ st1์˜ age๋ฅผ ์ˆ˜์ •

 

 

5. ๊ตฌ์กฐ์ฒด์™€ ๊ด€๋ จ๋œ ์ถ”๊ฐ€ ๊ฐœ๋…

  • ๊ณต์šฉ์ฒด(union): ๊ตฌ์กฐ์ฒด์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ชจ๋“  ๋ฉค๋ฒ„๊ฐ€ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ 
  • ์—ด๊ฑฐํ˜•(enum): ์—ฐ๊ด€๋œ ์ƒ์ˆ˜๋“ค์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ์ •์˜
  • ํด๋ž˜์Šค: ๊ตฌ์กฐ์ฒด์˜ ํ™•์žฅํ˜•์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์— ์‚ฌ์šฉ

 

6. TypeScript์—์„œ ๊ตฌ์กฐ์ฒด์™€ ๋น„์Šทํ•œ ๊ฐœ๋…

TypeScript์—์„œ๋„ ์ธํ„ฐํŽ˜์ด์Šค(interface)๋‚˜ ํƒ€์ž…(Type)์„ ์‚ฌ์šฉํ•ด ๋น„์Šทํ•œ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

type Student = {
  name: string;
  age: number;
  heghit: number;
};

const student1: Student = {
  name: "hyonie",
  age:20,
  height: 170
}

 

 

์ฆ‰, ๊ตฌ์กฐ์ฒด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜•์„ ์ •์˜ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์—ฐ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.