Menu
Coddy logo textTech

소스 파일

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 3번째.

지금까지는 헤더 파일에 function 선언을 배치했지만, 실제 function 코드(정의)는 main 파일에 있었습니다. 모듈식 프로그래밍의 다음 단계는 이러한 정의를 별도의 소스 파일(.c 파일)로 옮기는 것입니다.

이는 깔끔한 세 부분 구조를 만듭니다: header는 function을 선언하고, 별도의 소스 file은 이를 정의하며, main은 단순히 이를 사용합니다. 다음과 같습니다:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

math_utils.c가 자체 header를 포함한다는 점에 주목하세요. 이렇게 하면 function 정의가 선언과 일치하는지 확인할 수 있으며, 일치하지 않으면 컴파일러가 오류를 감지합니다. main 파일은 해당 function을 사용하기 위해 headerinclude하면 되며, add가 내부적으로 어떻게 작동하는지는 알 필요가 없습니다.

이러한 분리는 구현 세부 정보를 숨기고, 해당 함수 로직을 사용하는 파일을 건드리지 않고도 함수 로직을 수정할 수 있게 합니다.

challenge icon

챌린지

쉬움

코드를 적절한 세 파일 구조로 구성하여 간단한 수학 유틸리티를 만들어 봅시다. 선언을 위한 헤더, 구현을 위한 소스 파일, 그리고 이를 사용하는 main 파일로 구성합니다.

세 개의 파일을 만듭니다:

  • math_ops.h: multiplysubtract라는 두 연산의 function 선언을 포함하는 헤더 파일입니다. 두 function 모두 두 개의 정수를 받고 정수를 반환합니다. MATH_OPS_H 기호를 사용하여 include guards를 정의하는 것을 잊지 마세요.
  • math_ops.c: multiplysubtract의 실제 구현을 포함하는 소스 파일입니다. 선언과 정의가 일치하도록 이 파일의 자체 헤더를 include해야 합니다.
  • main.c: 헤더를 include하고 두 function을 모두 사용하여 계산을 수행하는 main 파일입니다.

multiply function은 두 정수의 곱을 반환하고, subtract는 첫 번째 정수에서 두 번째 정수를 뺀 값을 반환해야 합니다.

두 개의 정수 입력인 ab를 받습니다.

main function에서 두 연산의 results를 각각 별도의 줄에 출력합니다:

Product: {result of multiply}
Difference: {result of subtract}

예를 들어 입력이 83이면 출력은 다음과 같습니다:

Product: 24
Difference: 5

직접 해보기

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: multiply 함수를 a와 b로 호출하고 결과를 저장하세요
    
    // TODO: subtract 함수를 a와 b로 호출하고 결과를 저장하세요
    
    // TODO: 다음 형식으로 결과를 출력하세요:
    // 곱: {result of multiply}
    // 차: {result of subtract}
    
    return 0;
}
quiz icon실력 점검

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

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러