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;
}
// [함수 설계] 화씨를 섭씨로 변환하는 모듈
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;
}
시운전 과정에서 발생할 수 있는 치명적인 실수 두 가지를 박제합니다. 엔지니어링은 이론보다 '디버깅'에서 완성됩니다.
① 정수 나눗셈의 함정
컴퓨터는 5 / 9를 계산할 때, 정수끼리의 나눗셈으로 판단하여 소수점을 버리고 0으로 처리합니다. 반드시 5.0 / 9.0 처럼 소수점을 명시하여 실수 연산임을 선언해야 합니다.
② printf의 이중 구조(쌍따옴표 위치)
printf의 구조는 "출력 틀"과 , 변수들로 나뉩니다. 만약 변수 이름을 쌍따옴표 안에 넣어버리면, 컴퓨터는 값을 가져오는 게 아니라 글자 자체를 출력해버립니다.
// [BAD 케이스] 변수가 쌍따옴표 안에 갇힌 경우
printf("결과: %f\n, result"); // 변수가 글자로 취급되어 출력 오류 발생!
// [GOOD 케이스] 콤마(,)로 구역을 분리한 경우
printf("결과: %f\n" , result); // 정상적으로 변수값이 소켓에 꽂힘
printf("결과: %f\n, result"); // 변수가 글자로 취급되어 출력 오류 발생!
// [GOOD 케이스] 콤마(,)로 구역을 분리한 경우
printf("결과: %f\n" , result); // 정상적으로 변수값이 소켓에 꽂힘

댓글
댓글 쓰기