C에서 구조체와 Typedef 구조체의 차이점

Mehvish Ashiq 2023년10월12일
  1. C의 구조
  2. C에서 structtypedef struct의 차이점
  3. typedef 키워드 사용 시 핵심 사항
C에서 구조체와 Typedef 구조체의 차이점

이 자습서에서는 코드 예제를 통해 C 프로그래밍에서 structtypedef struct의 차이점을 설명하고 시연합니다.

C의 구조

배열을 사용할 때 동일한 유형/종류의 많은 데이터 항목을 보유하는 변수의 유형을 정의합니다. 마찬가지로 C 프로그래밍에는 구조라고 하는 또 다른 사용자 정의 데이터 유형이 있어 다양한 유형의 데이터 항목을 결합할 수 있습니다.

구조를 사용하여 레코드를 나타낼 수도 있습니다. 예를 들어, 각 사람이 다음과 같은 속성을 가지고 있는 사람의 세부 정보를 추적할 수 있습니다.

  • 이름
  • 성별
  • 나이
  • 이동하는
  • 이메일
  • 주소

C에서 structtypedef struct의 차이점

structtypedef struct를 사용하여 구조를 정의할 수 있지만 typedef 키워드를 사용하면 사용자 정의 데이터 유형(예: struct) 및 기본 데이터 유형(예: int)에 대한 대체 이름을 작성할 수 있습니다.

typedef 키워드는 기존 데이터 유형에 새로운 이름을 생성하지만 새 데이터 유형을 생성하지는 않습니다. typedef struct를 사용하면 더 깨끗하고 읽기 쉬운 코드를 가질 수 있으며 키 입력으로부터 우리(프로그래머)를 구해줍니다.

typedef struct는 변수 선언을 단순화하여 단순화된 구문으로 동등한 코드를 제공할 수 있습니다. 그러나 더 복잡한 전역 이름 공간이 생겨 더 광범위한 프로그램에 문제가 발생할 수 있습니다.

두 시나리오(structtypedef struct)에 대한 샘플 코드를 가지고 차이점을 이해해 봅시다.

typedef 키워드가 없는 예제 코드

#include <stdio.h>

struct Books {
  int id;
  char author[50];
  char title[50];
};

int main() {
  // declare `book1` and `book2` of type `Books`
  struct Books book1;
  struct Books book2;

  // the specifications for the `book1`
  book1.id = 1;
  strcpy(book1.author, "Zara Ali");
  strcpy(book1.title, "Tutorials for C Programming");

  // the specifications for the `book2`
  book2.id = 2;
  strcpy(book2.author, "Zaid Ali");
  strcpy(book2.title, "Tutorials for Java Programming");

  // display information for `book1` and `book2`
  printf("The id of book1: %d\n", book1.id);
  printf("The author of the book1: %s\n", book1.author);
  printf("The title of the book1: %s\n", book1.title);

  printf("The id of book2: %d\n", book2.id);
  printf("The author of the book2: %s\n", book2.author);
  printf("The title of the book2: %s\n", book2.title);

  return 0;
}

출력:

The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming

위의 코드에는 Books 유형의 book1book2라는 두 개의 변수가 있습니다. 더 많은 변수(예: book3, book4 등)를 선언해야 하는 경우 struct를 반복해서 입력해야 합니다.

여기서 typedef struct가 등장합니다. typedef struct 사용을 보여주는 다음 코드 스니펫을 참조하십시오.

typedef 키워드가 있는 예제 코드

다음 두 가지 방법에서 typedef를 사용할 수 있습니다.

방법 1:

#include <stdio.h>

struct Books {
  int id;
  char author[50];
  char title[50];
};

typedef struct Books Book;

int main() {
  // declare `book1` and `book2` of type `Book`
  Book book1;
  Book book2;

  // the specifications for the `book1`
  book1.id = 1;
  strcpy(book1.author, "Zara Ali");
  strcpy(book1.title, "Tutorials for C Programming");

  // the specifications for the `book2`
  book2.id = 2;
  strcpy(book2.author, "Zaid Ali");
  strcpy(book2.title, "Tutorials for Java Programming");

  // display information for `book1` and `book2`
  printf("The id of book1: %d\n", book1.id);
  printf("The author of the book1: %s\n", book1.author);
  printf("The title of the book1: %s\n", book1.title);

  printf("The id of book2: %d\n", book2.id);
  printf("The author of the book2: %s\n", book2.author);
  printf("The title of the book2: %s\n", book2.title);

  return 0;
}

출력:

The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming

방법 2:

#include <stdio.h>

typedef struct Books {
  int id;
  char author[50];
  char title[50];
} Book;

int main() {
  // declare `book1` and `book2` of type `Book`
  Book book1;
  Book book2;

  // the specifications for the `book1`
  book1.id = 1;
  strcpy(book1.author, "Zara Ali");
  strcpy(book1.title, "Tutorials for C Programming");

  // the specifications for the `book2`
  book2.id = 2;
  strcpy(book2.author, "Zaid Ali");
  strcpy(book2.title, "Tutorials for Java Programming");

  // display information for `book1` and `book2`
  printf("The id of book1: %d\n", book1.id);
  printf("The author of the book1: %s\n", book1.author);
  printf("The title of the book1: %s\n", book1.title);

  printf("The id of book2: %d\n", book2.id);
  printf("The author of the book2: %s\n", book2.author);
  printf("The title of the book2: %s\n", book2.title);

  return 0;
}

출력:

The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming

두 번째 방법은 typedef를 사용하는 것이 더 조직적이고 깨끗하며 이해하고 관리하기 쉽다는 것을 보여줍니다.

typedef 키워드 사용 시 핵심 사항

typedef 키워드를 사용하는 동안 몇 가지 사항을 기억해야 합니다. 위에 주어진 코드에서 다음과 같이 구조를 정의하고 있습니다.

typedef struct Books {
  int id;
  char author[50];
  char title[50];
} Book;

여기에는 struct Books라는 새로운 구조 유형과 struct Books에 대한 Book이라는 별칭이 있습니다. typedef가 있는 별칭 이름이 다른 일반 선언과 마찬가지로 선언 끝에 나타나는 이유가 궁금할 수 있습니다.

typedef는 스토리지 클래스 지정자(예: autostatic)와 같은 정확한 지정자 범주에 포함되었습니다. Book 유형 식별자만 사용하려는 경우 태그 이름 없이 선언할 수도 있습니다.

typedef struct {
  int id;
  char author[50];
  char title[50];
} Book;

구조체를 사용하는 동안 변수와 별칭을 호출해야 하는 항목에 주의해야 합니다. 다음과 같이 익명 구조를 사용하는 경우(구조에 이름이 없기 때문에 익명) 도서는 사용자 정의 데이터 유형 구조 변수가 됩니다.

struct {
  int id;
  char author[50];
  char title[50];
} Book;

위에 주어진 것과 동일한 구조를 사용하지만 typedef 키워드와 함께 사용하는 경우 Book은 데이터 유형 구조의 별칭(동의어)이 되며 이를 사용하여 변수를 선언할 수 있습니다(다음 참조).

typedef struct {
  int id;
  char author[50];
  char title[50];
} Book;
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - C Struct