C : Structure(구조체)

m_ngyeong·2024년 10월 15일
0

C

목록 보기
13/16
post-thumbnail

Structure(구조체)

C와 C++에서 서로 다른 자료형들을 하나로 묶어 새로운 자료형을 정의할 수 있게 해주는 사용자 정의 데이터 타입이다. 구조체는 여러 개의 변수를 묶어서 하나의 데이터 단위로 관리할 수 있도록 도와준다. 쉽게 말해, 관련된 데이터들을 하나의 그룹으로 묶어서 사용할 수 있게 해주는 기능이다.

구조체의 필요성

변수로 각각의 값을 따로 관리할 때 불편함이 있을 수 있다. 예를 들어, 한 사람의 정보를 저장하려면 이름, 나이, 주소 등의 여러 가지 정보를 따로따로 저장해야 한다. 이때, 구조체를 사용하면 한 사람의 여러 정보를 하나의 단위로 묶어 관리할 수 있다.


구조체 선언 및 사용 방법

구조체 선언

구조체는 struct 키워드를 사용해 선언한다. 구조체는 여러 다른 데이터 타입을 멤버로 가질 수 있으며, 멤버구조체 내에서 정의된 변수들을 의미한다.

struct 구조체이름 {
    데이터타입 멤버1;
    데이터타입 멤버2;
    ...
};

예를 들어, 한 사람의 정보를 저장하는 구조체를 선언한다고 해보자:

struct Person {
    char name[50];   // 이름
    int age;         // 나이
    float height;    // 키
};

구조체 변수 선언 및 초기화

구조체가 선언된 후, 구조체 변수를 선언하여 사용할 수 있다. 이는 마치 int, float와 같은 기본 자료형 변수를 선언하는 것과 비슷하다.

struct Person person1;

구조체 변수를 선언하면, 구조체의 각 멤버에 값을 저장하거나 값을 가져올 수 있다.

struct Person person1 = {"Alice", 25, 5.7};

구조체 멤버에 접근

구조체 멤버에 접근할 때는 점(.) 연산자를 사용한다. 구조체 변수를 통해 그 안의 개별 멤버에 접근할 수 있다.

person1.age = 30;  // person1의 age 값을 30으로 변경
printf("Name: %s\n", person1.name);  // person1의 name 값을 출력

구조체 사용 예시:

#include <stdio.h>

// 구조체 선언
struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    // 구조체 변수 선언 및 초기화
    struct Person person1 = {"Alice", 25, 5.7};

    // 구조체 멤버에 접근
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Height: %.2f\n", person1.height);

    // 구조체 멤버 값 변경
    person1.age = 26;
    printf("Updated Age: %d\n", person1.age);

    return 0;
}

출력:

Name: Alice
Age: 25
Height: 5.70
Updated Age: 26

구조체의 주요 특징

1. 복합 데이터형:

구조체는 여러 다양한 데이터형을 포함할 수 있다. 예를 들어, int, char, float 등을 한 구조체 내에 동시에 포함할 수 있다.

2. 구조체 변수 간의 복사:

구조체 변수끼리는 직접 복사할 수 있다.

struct Person person2 = person1;  // person1의 값을 person2에 복사

3. 구조체 배열:

구조체도 배열처럼 선언할 수 있다. 이를 통해 여러 개의 같은 유형의 데이터를 쉽게 관리할 수 있다.

struct Person people[10];  // 10명의 사람 정보를 담을 수 있는 배열

4. 구조체 포인터:

구조체는 포인터를 사용하여 효율적으로 다룰 수도 있다. 포인터를 사용하면 구조체 전체를 복사하는 대신, 구조체의 메모리 주소만 넘겨줄 수 있어 더 효율적인 메모리 관리를 할 수 있다.

#include <stdio.h>

struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    struct Person person1 = {"Bob", 30, 6.1};
    struct Person *ptr = &person1;  // 구조체 포인터 선언

    // 화살표 연산자를 사용하여 포인터로 구조체 멤버에 접근
    printf("Name: %s\n", ptr->name);
    printf("Age: %d\n", ptr->age);
    printf("Height: %.2f\n", ptr->height);

    return 0;
}

5. 구조체의 크기:

구조체는 각각의 멤버들이 차지하는 메모리 공간을 가지며, 메모리 정렬 때문에 멤버가 차지하는 공간보다 더 큰 크기를 가질 수도 있다.

6. 구조체의 장점:

구조체(structure)는 서로 다른 타입의 데이터를 하나로 묶어서 연관된 데이터를 쉽게 관리할 수 있도록 하는 강력한 도구이다. 이를 사용하면 여러 관련 데이터를 그룹화하여 코드의 가독성과 유지 보수성을 높일 수 있다. 구조체는 특히 복잡한 데이터 구조를 다룰 때 유용하며, 이를 포인터와 결합하면 더욱 효율적으로 데이터를 처리할 수 있다.


구조체의 사용 예시: 학생 관리 프로그램

학생 정보를 저장하는 간단한 프로그램이다.

#include <stdio.h>

struct Student {
    char name[50];
    int age;
    float grade;
};

int main() {
    struct Student students[3];

    // 학생 정보 입력
    for (int i = 0; i < 3; i++) {
        printf("Enter name, age, and grade for student %d:\n", i+1);
        scanf("%s %d %f", students[i].name, &students[i].age, &students[i].grade);
    }

    // 학생 정보 출력
    printf("\nStudent Information:\n");
    for (int i = 0; i < 3; i++) {
        printf("Name: %s, Age: %d, Grade: %.2f\n", students[i].name, students[i].age, students[i].grade);
    }

    return 0;
}
profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글