학습
C++ 구조체 (Structures)
C++ 구조체 (Structures) — 초급
구조체 (Structures)
1. 도입 (왜 배워야 하는가)
구조체(Structures)는 C++ 프로그래밍에서 복잡한 데이터를 효율적으로 관리하는 데 필수적인 요소입니다. 실무에서는 다양한 데이터 유형을 함께 묶어 하나의 논리적인 단위로 다룰 필요가 많은데, 이때 구조체를 사용하면 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다. 만약 구조체를 모른다면, 관련된 정보들을 개별적으로 관리해야 하며, 이는 코드의 복잡성을 증가시키고 오류를 유발할 가능성을 높입니다. 예를 들어, 학생 정보를 관리하는 프로그램에서 이름, 나이, 학번 등을 각기 다른 변수로 관리하게 되면, 해당 정보를 하나의 단위로 묶어 관리하는 것보다 훨씬 비효율적입니다.
2. 핵심 개념 설명
구조체는 여러 데이터 항목을 하나의 데이터 타입으로 묶는 방법입니다. 이를 통해 관련된 데이터를 하나의 단위로 관리할 수 있습니다. 쉽게 설명하자면, 구조체는 '상자'와 같아서, 각각의 데이터는 상자 안에 들어 있는 '물건'이라고 볼 수 있습니다. 예를 들어, 자동차라는 구조체를 만든다면, 브랜드, 모델, 연식 등의 정보를 포함할 수 있습니다.
| 용어 | 설명 |
|---|---|
| 구조체(Structure) | 여러 데이터를 하나로 묶는 사용자 정의 데이터 타입 |
| 필드(Field) | 구조체 내부에 포함된 데이터 항목 |
3. 기본 코드 예제
구조체의 기본 사용법을 살펴보겠습니다.
#include <iostream>
#include <string>
struct Student {
std::string name; // 학생의 이름
int age; // 학생의 나이
int studentID; // 학생의 학번
};
int main() {
Student student1; // Student 구조체의 인스턴스 생성
student1.name = "홍길동"; // 이름을 "홍길동"으로 설정
student1.age = 20; // 나이를 20으로 설정
student1.studentID = 12345; // 학번을 12345로 설정
// 학생 정보 출력
std::cout << "이름: " << student1.name << std::endl; // 이름 출력
std::cout << "나이: " << student1.age << std::endl; // 나이 출력
std::cout << "학번: " << student1.studentID << std::endl; // 학번 출력
return 0;
}
실행 결과:
이름: 홍길동
나이: 20
학번: 12345
코드 동작 설명:
#include <iostream>: 입력과 출력을 위한 라이브러리 포함.#include <string>: 문자열을 사용하기 위한 라이브러리 포함.struct Student {...};: Student라는 이름의 구조체를 정의.Student student1;: Student 구조체의 인스턴스인 student1 생성.student1.name = "홍길동";: student1의 이름 필드에 "홍길동"을 저장.student1.age = 20;: student1의 나이 필드에 20을 저장.student1.studentID = 12345;: student1의 학번 필드에 12345를 저장.std::cout << ...;: student1의 정보를 출력.- 쇼핑몰에서 장바구니를 구현할 때
- 학생 성적 관리 시스템
- 구조체 정의 후 인스턴스 생성하지 않기
- 필드에 잘못된 데이터 타입 할당하기
- 구조체는 여러 데이터를 하나의 단위로 묶어 관리할 수 있게 해준다.
- 관련된 정보를 함께 묶어 코드의 가독성과 유지보수성을 높일 수 있다.
- 실무에서 구조체를 활용하여 장바구니, 학생 정보 관리 등 다양한 패턴을 구현할 수 있다.
- 다음에 학습하면 좋은 주제: 클래스(Class), 객체 지향 프로그래밍(Object-Oriented Programming)
4. 실전 활용 예제
struct CartItem {
std::string productName;
double price;
int quantity;
};
CartItem item1;
item1.productName = "사과";
item1.price = 1000;
item1.quantity = 3;
- 장바구니에 담긴 아이템을 구조체로 정의하여 가격, 이름, 수량을 함께 관리합니다.
struct Grade {
std::string subject;
double score;
};
Grade math;
math.subject = "수학";
math.score = 85.5;
- 각 과목의 성적을 구조체로 묶어 관리함으로써, 관련 정보를 쉽게 접근할 수 있습니다.
5. 흔한 실수와 주의사항
- 잘못된 코드:
Student student1; // 구조체 정의 후 인스턴스 생성
student1.name = "홍길동"; // 인스턴스를 사용하기 전에 생성해야 함
- 올바른 코드:
Student student1 = {"홍길동", 20, 12345}; // 구조체 초기화
- 잘못된 코드:
student1.age = "스무 살"; // 문자열을 정수형 필드에 할당
- 올바른 코드:
student1.age = 20; // 정수형 값을 할당