๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐ŸŽ› Others.../- c & python & android

[C ์–ธ์–ด] struct, ๊ตฌ์กฐ์ฒด์˜ ๊ธฐ๋ณธ๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

by Wonit 2021. 7. 4.

 

๊ตฌ์กฐ์ฒด

ํ˜„๋Œ€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(int, long, char, double) ๋งŒ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์ž‘์‹œํ‚ค๊ธฐ์—๋Š” ๋งŽ์€ ์–ด๋ ค์›€์ด ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ฐœ์ „ํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฐ์ฒด์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์—์„œ ๋ฐ”๋กœ ๊ฐ์ฒด๋กœ ๋ฐœ์ „ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ๊ฐ์ฒด์™€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ๊ฐœ๋…์ด ๋ฐ”๋กœ ๊ตฌ์กฐ์ฒด ์ด๋‹ค

 

๊ตฌ์กฐ์ฒด์˜ ๊ธฐ๋ณธ ์ปจ์…‰์€ Primitive Data type ์„ ๋ชจ์•„ Abstract data type ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๊ตฌ์กฐ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ

 

๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋ง์€ ์ผ๋‹จ ์ •์˜ํ•˜๊ณ , ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค๋Š” ์†Œ๋ฆฌ๋‹ค.

 

๊ตฌ์กฐ์ฒด ์ •์˜ํ•˜๊ธฐ

 

๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

  • struct ๋กœ ์ •์˜ํ•˜๊ธฐ
    • ๋ณ€์ˆ˜ ์ƒ์„ฑํ•  ๋•Œ struct ํ‚ค์›Œ๋“œ๋ฅผ ๋ช…์‹œํ•ด์•ผํ•จ
  • typedef struct ๊ตฌ์กฐ์ฒด ์ด๋ฆ„
    • ๊ตฌ์กฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ alias ๋ฅผ ์ด์šฉํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜ ์ƒ์„ฑํ•  ๋•Œ struct ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • typedef struct
    • ์ต๋ช… ๊ตฌ์กฐ์ฒด๋กœ ๊ตฌ์กฐ์ฒด ์ด๋ฆ„์„ ์ƒ๋žตํ•˜๊ณ  ๋ฐ”๋กœ alias ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

 

// ์ •์˜ ๋ฐฉ์‹ 1
struct Student {
    int id;
    char *name;
    double score;
};

// ์ •์˜ ๋ฐฉ์‹ 2
typedef struct Professor_s {
    int id;
    char *name;
    char major[20];
} Professor;

// ์ •์˜ ๋ฐฉ์‹ 3
typedef struct {
    int id;
    char *name;
    char major[20];
} Researcher;

 

๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์˜ 3๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ํ•œ ๊ฐ€์ง€๋งŒ ์‚ฌ์šฉํ•ด๋„ ์ข‹์€๋ฐ ๋ณดํ†ต ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ํŽธ๋ฆฌ์„ฑ์„ ์œ„ํ•ด 3๋ฒˆ ์งธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ตฌ์กฐ์ฒด์— ๊ฐ’ ํ• ๋‹นํ•˜๊ธฐ

 

๊ตฌ์กฐ์ฒด์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

  1. ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ํ• ๋‹นํ•˜๊ธฐ
  2. ํ•ญ๋ชฉ ์—ฐ์‚ฐ์ž .๊ณผ ๋Œ€์ž… ์—ฐ์‚ฐ์ž = ๋ฅผ ์ด์šฉํ•ด์„œ ํ• ๋‹น

 

#include <stdio.h>
#include <string.h>

struct Student {
    int id;
    char *name;
    double score;
};

typedef struct {
    int id;
    char *name;
    char major[20];
} Professor;

int main() {

    /*
    * 1. struct ๋ช…์‹œ
    * 2. ๋ณ€์ˆ˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”
    */
    struct Student student = {21, "์žฅO์ต", 4.5};

    /*
    * 1. struct ํ‚ค์›Œ๋“œ ๋ฌด์‹œ
    * 2. ํ•ญ๋ชฉ ์—ฐ์‚ฐ์ž . ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ• ๋‹น
    */
    Professor professor;

    professor.id = 21;
    professor.name = "์žฅO์ต";
    strcpy(professor.major, "์ •๋ณด๋ณด์•ˆ");

    return 0;
}

๋Œ“๊ธ€