[C언어 소스]여러 개의 파일로 프로그래밍 구성하기

안녕하세요. 언제나 휴일에 언휴예요.

이번 실습은 여러 개의 파일로 프로그래밍 구성하기입니다.

프로그램 규모가 커지면 원한 기능 혹은 원하는 형식을 찾고 이를 참조하는 작업에 비용이 들죠.

그리고 잘못된 곳을 수정하는 등의 유지 보수 비용이 커질 수 있어요.

여러 개의 파일로 프로그램을 구성하는 것은 모듈화 작업의 시작이라 할 수 있습니다. 그리고 모듈화는 유지 보수 비용을 줄이는 여러 가지 방법 중에 하나이고요.

프로그램을 구성하는 파일을 나누는 방법 중에 기능 중심으로 나누거나 데이터 중심으로 나눌 수가 있어요.

여기에서는 데이터 중심으로 나누는 작업을 해 볼 거예요.

이번 실습에서는 학생 구조체를 정의하고 이를 핸들링하는 함수를 별도의 파일에 작성할 거예요.

그리고 사용하는 곳에서는 헤더 파일을 포함하여 사용하는 실습입니다.

Student.h

헤더 파일에는 사용자 정의 형식 및 매크로 상수 정의 및 다른 소스 파일에서 호출해서 사용할 함수를 선언합니다.

여기에서는 학생 구조체를 정의할게요.

그리고 동적으로 학생 개체를 생성하는 함수와 출력하는 함수, 소멸하는 함수를 선언할게요.

#pragma once
#define MAX_NAME_LEN    20

typedef struct Student Student;
struct Student
{
    char name[MAX_NAME_LEN];
    int num;
};

Student* NewStudent(const char* name, int num);
void ViewStudent(Student* student);
void DeleteStudent(Student* student);

Student.c

Student 형식 개체를 제어하는 함수는 Student.c 소스 파일에 구현합니다.

동적으로 생성하는 함수, 출력하는 함수, 소멸하는 함수를 구현합니다.

#include "Student.h"
#include 
#include 
#include 
#include 

Student* NewStudent(const char* name, int num)
{
    Student* student = (Student*)malloc(sizeof(Student));
    memset(student, 0, sizeof(Student));
    strncpy_s(student->name, MAX_NAME_LEN, name, MAX_NAME_LEN - 1);
    student->num = num;
    return student;
}
void ViewStudent(Student* student)
{
    printf("이름:%s 번호:%d\n", student->name, student->num);
}
void DeleteStudent(Student* student)
{
    free(student);
}

Program.c

Student 형식을 사용하는 곳에서는 include 문을 이용하여 Student.h 파일을 포함합니다.

그리고 제공하는 형식 및 함수를 사용하는 것이죠.

/* https://ehpub.co.kr
   언제나 C언어 예제 Center
   여러 개의 파일로 구성하여 프로그래밍 
   학생 구조체 정의 - 동적 메모리 할당 및 사용*/
#include "Student.h"
int main()
{
    Student* stu = NewStudent("홍길동", 27);
    ViewStudent(stu);
    DeleteStudent(stu);
    return 0;
}

이처럼 정의할 형식을 기준으로 헤더 및 소스 파일을 추가하여 작성하면 보다 가독성이 높아질 거예요.

이상으로 이번 실습을 마칠게요.