본문 바로가기
컴퓨터 이론/C언어 & 자료구조 & 알고리즘

01. 구조체 (struct, typedef)

by 컴퓨터공부용 2023. 2. 10.

Q. 구조체 이해를 위한 문제

 여러분은 A교육기관의 강사입니다. 수강생들의 시험 점수를 관리하기 위한 프로그램을 작성하려고 합니다.

수강생 5명의 수강생번호, 이름, 국어 점수, 영어 점수, 수학 점수 입력받아 저장하고 출력하는 프로그램을 작성하세요.


C언어 기초를 배운 학생이 위 문제를 마주한다면 다음과 같이 프로그램을 작성할 것이다.

#include <stdio.h>

void main(){
	char student_name[5][10];
	int student_num[5], student_kor[5], student_eng[5], student_math[5], i;
	
	for(i = 0; i< 5; i++)
	    scanf("%d %s %d %d %d", &student_num[i], student_name[i], &student_kor[i], &student_eng[i], &student_math[i]);

	for(i = 0; i< 5; i++)
	    printf("%d %s %d %d %d\n", student_num[i], student_name[i], student_kor[i], student_eng[i], student_math[i]);
}

위처럼 수강생의 정보를 배열에 저장하는 형태로 프로그램을 작성할 것이다.

현재로서는 괜찮지만 저장해야 할 속성이 많아지면 여러 개의 배열을 생성해야 한다.

배열을 많이 생성할 수록 관리하기 어렵고, 코드를 알아보기도 쉽지 않다.

 

이러한 경우 우리는 구조체를 활용하여 프로그램을 작성하게 된다.

구조체는 아래의 형태로 선언한다.

struct 구조체명{
    자료형 변수명;
    자료형 변수명;
    ㆍㆍㆍ
};

배열은 동일한 자료형을 가진 여러 변수를 하나로 묶어서 사용하게 했다면, 

구조체는 다양한 자료형을 가진 여러 변수를 하나로 묶어서 사용하게 해 준다.

 

구조체를 사용하여 위의 문제를 해결하면 아래와 같이 프로그램을 작성할 수 있다.

#include <stdio.h>

struct data{
    int num;
    char name[10];
    int kor;
    int eng;
    int math;
};

void main(){
	struct data student[5];
	int i;
	
	for(i=0;i<5;i++)
	    scanf("%d %s %d %d %d", &student[i].num, student[i].name, &student[i].kor, &student[i].eng, &student[i].math);
	    
	for(i=0;i<5;i++)
	    printf("%d %s %d %d %d\n", student[i].num, student[i].name, student[i].kor, student[i].eng, student[i].math);
}

구조체를 활용하니 어떤 데이터가 있는지 손쉽게 알아볼 수 있다는 장점이 있다.

 

그러면 구조체 안에 있는 변수들은 어떻게 접근해야 할까?

구조체 내부에 있는 변수를 우리는 멤버 변수라고 부르며, ' . '을 이용하여 멤버변수에 접근할 수 있다.

. '을 이용하여 접근한 멤버 변수는 우리가 흔히 사용하는 변수처럼 그냥 사용하면 된다.


구조체를 선언하여 사용하는 모습을 자세히 살펴보자

struct data student[5];

구조체를 선언할 때에는 struct 키워드를 작성하여 data가 구조체라는 것을 알려줘야 한다.

그럼 struct 키워드를 사용하지 않고 구조체를 선언할 수는 없을까?

 

typedef를 이용하여 하나의 자료형으로 만들면 된다.

typedef는 type define으로 타입을 정의한다는 의미를 가지고 있다. 

기존의 자료형도 typedef를 이용하여 자료형의 이름을 재정의할 수 있다.

typedef int 정수형;
typedef struct 구조체명 { ... }구조체명;

위의 경우 기존의 int 자료형을 한글인 정수형으로 재정의 한 것을 나타낸다.

구조체는 typedef를 이용하여 하나의 자료형으로 정의한 것을 나타낸다.

 

구조체를 정의하는 struct와 자료형을 재정의하는 typedef를 모두 활용하면 다음과 같이 프로그램을 작성할 수 있다.

#include <stdio.h>

typedef struct data{
    int num;
    char name[10];
    int kor;
    int eng;
    int math;
}data;
typedef int 정수형;

void main(){
	data student[5];
	정수형 i;
	
	for(i=0;i<5;i++)
	    scanf("%d %s %d %d %d", &student[i].num, student[i].name, &student[i].kor, &student[i].eng, &student[i].math);
	    
	for(i=0;i<5;i++)
	    printf("%d %s %d %d %d\n", student[i].num, student[i].name, student[i].kor, student[i].eng, student[i].math);
}

 

'컴퓨터 이론 > C언어 & 자료구조 & 알고리즘' 카테고리의 다른 글

06. 문자열  (0) 2023.03.21
05. 동적 메모리 할당(2)  (0) 2023.03.20
04. 동적 메모리 할당  (0) 2023.03.20
03. 포인터(2)  (0) 2023.02.14
02. 포인터  (0) 2023.02.13

댓글