Menu
Coddy logo textTech

소스 파일

Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 3번째.

지금까지는 함수 선언을 헤더 파일에 배치했지만, 실제 함수 코드(정의)는 메인 파일에 작성해 왔습니다. 모듈형 프로그래밍의 다음 단계는 이러한 정의들을 별도의 소스 파일(.c 파일)로 옮기는 것입니다.

이것은 깔끔한 3부 구조를 만듭니다. 헤더는 함수를 선언하고, 별도의 소스 파일은 이를 정의하며, 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가 자체 헤더를 포함하고 있다는 점에 주목하세요. 이는 함수 정의가 선언과 일치하도록 보장하며, 만약 일치하지 않으면 컴파일러가 오류를 찾아냅니다. 메인 파일은 함수를 사용하기 위해 헤더만 포함하면 되며, add가 내부적으로 어떻게 작동하는지 알 필요가 없습니다.

이러한 분리는 구현 세부 사항을 숨겨진 상태로 유지하며, 해당 함수를 사용하는 파일을 수정하지 않고도 함수 로직을 변경할 수 있게 해줍니다.

challenge icon

챌린지

쉬움

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

다음 세 개의 파일을 생성하게 됩니다:

  • math_ops.h: multiplysubtract라는 두 가지 연산에 대한 함수 선언을 포함하는 헤더 파일입니다. 두 함수 모두 두 개의 정수를 인자로 받아 정수를 반환합니다. MATH_OPS_H 심볼을 사용하여 헤더 가드를 포함하는 것을 잊지 마세요.
  • math_ops.c: multiplysubtract의 실제 구현이 포함된 소스 파일입니다. 선언과 정의가 일치하도록 이 파일은 자체 헤더를 포함해야 합니다.
  • main.c: 헤더를 포함하고 두 함수를 사용하여 계산을 수행하는 메인 파일입니다.

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

두 개의 정수 입력 ab를 받게 됩니다.

메인 함수에서 두 연산의 결과를 별도의 줄에 출력하세요:

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

예를 들어, 입력값이 83인 경우 출력은 다음과 같습니다:

Product: 24
Difference: 5

치트 시트

함수 정의는 메인 파일에서 별도의 소스 파일(.c 파일)로 이동하여 3부 구성의 모듈식 구조를 만들 수 있습니다:

  • 헤더 파일 (.h): 함수 선언을 포함합니다
  • 소스 파일 (.c): 함수 정의를 포함합니다
  • 메인 파일 (main.c): 함수를 사용합니다

구조 예시:

// 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;
}

소스 파일(.c)은 함수 정의가 선언과 일치하는지 확인하기 위해 자체 헤더를 포함해야 합니다. 메인 파일은 함수를 사용하기 위해 헤더만 포함하면 되므로 구현 세부 사항을 숨길 수 있습니다.

직접 해보기

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

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

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

Object Oriented Programming의 모든 레슨