Menu
Coddy logo textTech

구조체와 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를 반복해서 입력해야 하는 시각적 번거로움을 줄여줍니다.

challenge icon

챌린지

쉬움

간단한 도서 인벤토리 시스템을 구축하기 위해 구조체와 typedef를 사용하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 다음 멤버를 포함하는 struct Book이라는 이름의 struct를 정의합니다:
    • 정수형 id
    • 크기가 50인 문자 배열 title
    • 부동 소수점형 price
    • 정수형 quantity
  2. typedef를 사용하여 struct Book에 대한 Book이라는 타입 별칭을 생성합니다.
  3. main 함수에서:
    • Book 타입의 변수 book1book2를 선언합니다.
    • 첫 번째 도서에 대해 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를 출력합니다.

이 챌린지는 구조체와 함께 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;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨