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
구조체는 여러 다양한 데이터형을 포함할 수 있다. 예를 들어, int
, char
, float
등을 한 구조체 내에 동시에 포함할 수 있다.
구조체 변수끼리는 직접 복사할 수 있다.
struct Person person2 = person1; // person1의 값을 person2에 복사
구조체도 배열처럼 선언할 수 있다. 이를 통해 여러 개의 같은 유형의 데이터를 쉽게 관리할 수 있다.
struct Person people[10]; // 10명의 사람 정보를 담을 수 있는 배열
구조체는 포인터를 사용하여 효율적으로 다룰 수도 있다. 포인터를 사용하면 구조체 전체를 복사하는 대신, 구조체의 메모리 주소만 넘겨줄 수 있어 더 효율적인 메모리 관리를 할 수 있다.
#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;
}
구조체는 각각의 멤버들이 차지하는 메모리 공간을 가지며, 메모리 정렬 때문에 멤버가 차지하는 공간보다 더 큰 크기를 가질 수도 있다.
구조체(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;
}