EP.2-5 함수

EP.2-5 함수: 반복되는 로직의 모듈화와 캡슐화 | 제어 엔지니어 구조 분석

Phase 2: Operations & Control Logic

EP.2-5 함수 — 반복되는 로직의 모듈화

중구난방인 코드를 하나의 독립된 '제어 모듈'로 패키징하기

함수(Function): 프로그램의 부품화

복잡한 설비를 한 대의 제어기(PLC)에 다 때려 넣으면 유지보수가 불가능해집니다. 이를 기능별로 나누어 독립된 모듈로 만드는 것이 '함수'입니다. 필요할 때마다 호출하고, 결과만 받으면 끝이죠.

  • 매개변수(Input): 모듈에 입력하는 제어값
  • 반환값(Output): 모듈이 계산하여 돌려주는 결과값

실습: 화씨/섭씨 변환 모듈 설계

센서 데이터(F)를 인간이 읽기 쉬운 단위(C)로 변환하는 함수를 구축합니다. 계산 로직을 분리함으로써 메인 코드는 한결 간결해집니다.

#include <stdio.h>

// [함수 설계] 화씨를 섭씨로 변환하는 모듈
float convertToCelsius(float fahrenheit) {
    float celsius;
    // 5.0 / 9.0 처럼 점(.)을 찍어야 실수 나눗셈이 수행됩니다.
    celsius = (fahrenheit - 32) * 5.0 / 9.0;
    return celsius;
}

int main() {
    float sensorF = 98.6;
    float resultC;

    // 함수 호출 (모듈 기동)
    resultC = convertToCelsius(sensorF);

    printf("센서값(F): %.1f -> 변환값(C): %.1f\n", sensorF, resultC);

    return 0;
}

▲ 실습 결과 : 화씨(F) 섭씨(C) 출력

🛠️ 마스터의 시운전 노트: "왜 결과가 0으로 나올까?"

시운전 과정에서 발생할 수 있는 치명적인 실수 두 가지를 박제합니다. 엔지니어링은 이론보다 '디버깅'에서 완성됩니다.

① 정수 나눗셈의 함정

컴퓨터는 5 / 9를 계산할 때, 정수끼리의 나눗셈으로 판단하여 소수점을 버리고 0으로 처리합니다. 반드시 5.0 / 9.0 처럼 소수점을 명시하여 실수 연산임을 선언해야 합니다.

② printf의 이중 구조(쌍따옴표 위치)

printf의 구조는 "출력 틀", 변수들로 나뉩니다. 만약 변수 이름을 쌍따옴표 안에 넣어버리면, 컴퓨터는 값을 가져오는 게 아니라 글자 자체를 출력해버립니다.

// [BAD 케이스] 변수가 쌍따옴표 안에 갇힌 경우
printf("결과: %f\n, result"); // 변수가 글자로 취급되어 출력 오류 발생!

// [GOOD 케이스] 콤마(,)로 구역을 분리한 경우
printf("결과: %f\n" , result); // 정상적으로 변수값이 소켓에 꽂힘
© 2026 ZIN PARK · MASTERING CONTROL ENGINEERING SERIES
"실수는 배선 오류와 같지만, 디버깅은 그 오류를 시스템의 견고함으로 바꾸는 과정이다."

댓글

이 블로그의 인기 게시물

EP.0 코딩의 첫걸음 — 전기를 어떻게 연결할 것인가?

EP.0-1 천공카드

EP.1-1트랜지스터