구조체와 typedef
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 59번째.
typedef의 가장 실용적인 용도 중 하나는 struct 타입에 대한 별칭을 만드는 것입니다. 이를 통해 해당 타입의 변수를 선언할 때마다 struct 키워드를 반복해서 작성할 필요가 없어져, 코드가 더 깔끔해지고 가독성이 좋아집니다.
typedef를 구조체 정의와 결합하면, 구조체를 직접 참조하는 새로운 타입 이름을 생성할 수 있습니다. 구문은 다음과 같습니다:
typedef struct Point {
int x;
int y;
} Point;이제 Point 변수가 필요할 때마다 struct Point p1;를 작성하는 대신, 간단히 Point p1;라고 작성할 수 있습니다. 두 선언 모두 정확히 동일한 작업을 수행하지만, typedef 버전이 더 간결하고 읽기 쉽습니다.
이 접근 방식은 사용자 정의 데이터 타입을 자주 사용하는 대규모 프로그램에서 특히 유용합니다. 이 방식은 코드를 다른 프로그래밍 언어와 더 비슷하게 보이게 하며, 프로그램 전체에서 struct를 반복해서 입력해야 하는 시각적 번거로움을 줄여줍니다.
챌린지
쉬움간단한 도서 인벤토리 시스템을 구축하기 위해 구조체와 typedef를 사용하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 다음 멤버를 포함하는
struct Book이라는 이름의struct를 정의합니다:- 정수형
id - 크기가 50인 문자 배열
title - 부동 소수점형
price - 정수형
quantity
- 정수형
typedef를 사용하여struct Book에 대한Book이라는 타입 별칭을 생성합니다.- main 함수에서:
Book타입의 변수book1과book2를 선언합니다.- 첫 번째 도서에 대해 ID, title, price, quantity 순서로 입력을 읽습니다.
- 이 값들을
book1의 멤버에 할당합니다. - 두 번째 도서에 대해 ID, title, price, quantity 순서로 입력을 읽습니다.
- 이 값들을
book2의 멤버에 할당합니다. - 두 도서의 정보를 다음의 정확한 형식으로 출력합니다:
Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
- 각 도서의 총 재고 가치(price × quantity)를 계산하고 다음의 정확한 형식으로 출력합니다:
Book 1 Total Value: [total_value]Book 2 Total Value: [total_value]
- 두 도서의 합산 재고 가치를 계산하고 다음의 정확한 형식으로 출력합니다:
Combined Inventory Value: [combined_value] - 어느 도서의 개별 가치가 더 높은지 확인하여 출력합니다:
- book1의 총 가치가 더 높으면:
Book 1 has higher value를 출력합니다. - book2의 총 가치가 더 높으면:
Book 2 has higher value를 출력합니다. - 두 도서의 가치가 같으면:
Both books have equal value를 출력합니다.
- book1의 총 가치가 더 높으면:
이 챌린지는 구조체와 함께 typedef를 사용함으로써 프로그램 전체에서 struct Book을 반복해서 작성할 필요를 어떻게 없애주는지 보여줍니다. 변수를 struct Book book1;으로 선언하는 대신 Book book1;으로 간단히 작성할 수 있어 코드가 더 깔끔해지고 가독성이 좋아집니다. 구조체 정의와 typedef를 결합하고, 구조체 멤버를 다루며, 구조체 데이터를 사용하여 계산을 수행하는 연습을 하게 됩니다.
직접 해보기
#include <stdio.h>
#include <string.h>
// TODO: 여기에 구조체와 typedef를 정의하세요
int main() {
// TODO: 여기에 Book 변수들을 선언하세요
// 첫 번째 도서의 입력 읽기
int id1, quantity1;
char title1[50];
float price1;
scanf("%d", &id1);
scanf("%s", title1);
scanf("%f", &price1);
scanf("%d", &quantity1);
// TODO: book1 멤버들에 값을 할당하세요
// 두 번째 도서의 입력 읽기
int id2, quantity2;
char title2[50];
float price2;
scanf("%d", &id2);
scanf("%s", title2);
scanf("%f", &price2);
scanf("%d", &quantity2);
// TODO: book2 멤버들에 값을 할당하세요
// TODO: 도서 정보를 출력하고, 값을 계산하고, 비교하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Logic & Flow의 모든 레슨
10열거형(Enum)과 Typedef
명명된 상수를 위한 enum열거형(Enum) 선언과 사용Switch 문에서의 열거형(Enum) 활용타입 별칭을 위한 typedef 사용구조체와 typedef요약: Typedef와 열거형(Enum) 실습