๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ› Others.../- c & python & android

[C ์–ธ์–ด] ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ์™€ ํ™”์‚ดํ‘œ ์—ฐ์‚ฐ์ž

by Wonit 2021. 7. 4.

 

๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

 

์ง€๋‚œ ์‹œ๊ฐ„ ์šฐ๋ฆฌ๋Š” ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜๋‹ค.

 

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์•ผ๊ธฐํ•œ ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•ด์„œ ํ•œ ์ค„๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

 

๊ตฌ์กฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ์ž๋ฃŒํ˜•์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ํฐ ์‚ฌ์šฉ์ž ์ •์˜ ์ž๋ฃŒํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ

 

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•ด๋ณผ๋งŒํ•œ ์ฃผ์ œ๊ฐ€ ๋ฐ”๋กœ ํฐ ์ž๋ฃŒํ˜•์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ตฌ์กฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผ๋ฐ˜ ์ž๋ฃŒํ˜•๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค

 

์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์•ผ๊ธฐ ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ƒ๊ธฐํ•ด๋ณด์ž.

 

 

์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋–ค ์˜๋ฏธ์ผ๊นŒ?

 

๋ฐ”๋กœ Stack ์˜์—ญ์— ๊ตฌ์กฐ์ฒด์˜ ํฌ๊ธฐ๋งŒํผ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ตฌ์กฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ๊ตฌ์กฐ์ฒด๋งˆ๋‹ค ๊ฐ๊ฐ ํ• ๋‹น์„ ๋ฐ›์•„๋ฒ„๋ฆฌ๋ฉด Stack ์˜์—ญ์€ ๊ฝ‰ ์ฐจ๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ตฌ์กฐ์ฒด๋Š” ์ž„์˜๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ Heap ์˜์—ญ์— ํ• ๋‹น๋ฐ›๊ณ  ๋‹ค ์‚ฌ์šฉํ•˜๋ฉด free() ํ•จ์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์‹œํ‚ค๋Š”๊ฒŒ ์ตœ์ ํ™” ๋ถ€๋ถ„์—์„œ ์ข‹์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ์‹ค์ „์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด์ž

 

๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹นํ•˜๊ธฐ

 

๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์ผ๋ฐ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ * ์ฐธ์กฐ ์—ฐ์‚ฐ์ž๋ฅผ ์ƒ์„ฑ ์‹œ์— ๋ณ€์ˆ˜๋ช… ์•ž์— ์œ„์น˜์‹œํ‚ค๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” Heap ์˜์—ญ์— ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ, ๊ตฌ์กฐ์ฒด์˜ ํฌ๊ธฐ๋งŒํผ ์ƒ์„ฑ์„ ํ•  ๊ฒƒ์ด๋‹ˆ malloc ์œผ๋กœ ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ๋งŒํผ size๋ฅผ ์ง€์ •ํ•ด์„œ ์ƒ์„ฑ๊ณผ ํ• ๋‹น์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • struct ๊ตฌ์กฐ์ฒด_์ด๋ฆ„ *ํฌ์ธํ„ฐ_์ด๋ฆ„ = malloc(sizeof(struct ๊ตฌ์กฐ์ฒด_์ด๋ฆ„));

 

ํ™”์‚ดํ‘œ ์—ฐ์‚ฐ

 

์œ„์—์„œ ์ƒ์„ฑ๊ณผ ํ• ๋‹น์„ ํ–ˆ์œผ๋‹ˆ ์‹ค์งˆ์ ์œผ๋กœ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ํ™”์‚ดํ‘œ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

ํ™”์‚ดํ‘œ ์—ฐ์‚ฐ์€ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ ์•ˆ์˜ ๋ณ€์ˆ˜์—, ์ฆ‰ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

  • ํฌ์ธํ„ฐ_์ด๋ฆ„ -> ๋ฉค๋ฒ„๋ณ€์ˆ˜_์ด๋ฆ„ = ๊ฐ’

 

ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งŒ์•ฝ ํ™”์‚ดํ‘œ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ๊ด„ํ˜ธ์™€ ์—ญ์ฐธ์กฐ๋ฅผ ์ด์šฉํ•ด์„œ๋„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. (*ํฌ์ธํ„ฐ_์ด๋ฆ„).๋ฉค๋ฒ„๋ณ€์ˆ˜ = ๊ฐ’

 

์ด์ œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

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

typedef struct {
    int age;
    char name[];
} Student;

int main() {
    Student *pointer = malloc(sizeof(Student));

    pointer -> age = 25;
    strcpy(pointer -> name, "์žฅ์›์ต");

    printf("์ด๋ฆ„: %s \n", pointer -> name);
    printf("๋‚˜์ด: %d", pointer -> age);

    free(pointer);

    return 0;
}

 

malloc ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ–ˆ๋‹ค๋ฉด ๋งˆ์ง€๋ง‰์— free๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ์‹œํ‚ค๋Š” ๊ฒƒ๋„ ์žŠ์ง€ ๋ง์ž

 

๋Œ“๊ธ€