[C] Function(함수) (기초)

2021. 4. 5. 16:04강의실/C, C++

1. 서론

프로그래밍에서 Function(함수)이란 수학에서의 함수와 비슷하면서도 다릅니다. 수학처럼 Input을 받아 일련의 과정을 거친 결과를 Return할 수도 있고, Input 없이 특정 작업을 수행하여 생긴 결과를 Return 할 수도 있습니다. 여러분들이 처음 배우며 사용한 printf 또한 미리 정의된 함수의 일종입니다. 심지어 무의식적으로 사용하셨을 main 또한 함수입니다.

함수를 사용하는 이유는, 반복 작업에 대해 더 짧고 효율적으로 코드를 작성하기 위함이고, 결국 코드의 양을 줄이는 것은 실수를 줄이는 것을 의미합니다. 또한 혹시나 있을 실수에서 코드 디버깅을 더 쉽게 만들어주기도 합니다. 코딩 실력을 늘리시려면 구상 단계부터 덩어리를 나누시는 것을 추천하며, 이 덩어리들을 하나의 함수로 구현하시면 됩니다


2. 함수의 구조

우선 C에서의 함수는 어떻게 생겼을까요?

반환자료형 함수명(자료형 매개변수) {

	코드
    
}

위에 모습과 같이 반환값의 자료형을 먼저 지정해주고, 원하시는 함수명을 정해준 후, Input이 필요하다면 해당 매개변수를 지정해 함수를 만들게 됩니다. 그리고 해당 함수가 호출될 때 실행시킬 코드를 중괄호 블록 안에 넣어주시면 됩니다. Return할 값이 있다면 그것 또한 블록 안에 넣어주셔야 합니다. 다음으로 예시를 살펴보겠습니다.


3. 함수 예시

  • 예시 Project에서의 적용 (덧셈)
#include <stdio.h>

int num_add(int a, int b); //함수 원형 선언

int main(void) { //main 함수 시작

	//변수선언
	int num_a = 3;
	int num_b = 5;
    
	//num_a + num_b를 출력함, 선언한 함수 num_add 이용  
	printf("%d + %d = %d", num_a, num_b, num_add(num_a, num_b));

	return 0;
}

int num_add(int a, int b) { //덧셈을 해주는 num_add 함수

	return a + b; //integer 형식으로 a,b를 입력받았으니 이를 더하고 결과를 return
}

간단하게 만들어본 예제입니다. 주어진 두 정수 num_a와 num_b를 더할 때 num_add 함수를 만들어 사용했습니다. 앞에서는 함수의 모습만 소개해드렸는데, 이번 예제에서는 include → 함수 원형 선언 → main 함수 → num_add 함수 순서로 실제 코딩에서 적용을 보여드렸습니다. input 매개변수의 이름은 마치 그 함수 내에선 변수를 선언한 것과 동일하게 동작하기에 예제에서 int a, int b를 a + b에서 사용한 것과 같이 이름을 일치시켜주시면 됩니다.

함수 원형을 main 함수 앞에서 선언하지 않으면 어떻게 될까요? C는 위에서 아래로 순차적으로 코드를 해석하기에 함수 원형 선언이 빠진다면, main 함수에서 알 수 없는 함수를 호출한 것이 돼버리고, 결국 오류가 출력될 겁니다.

사실 이렇게만 보면 왜 꼭 함수로 표현하지 싶으시겠지만, 함수 안에 들어갈 코드가 10줄이 넘고, 그 함수를 100번 호출해야 한다고 생각해보면, 10줄을 한 번만 코딩하고 100번은 함수명만 적는 것과 10줄을 100번 적어서 총 1000줄을 코딩하는 것은 작업량도 차이 나고 그에 따라 실수의 가능성도 높아지겠죠? 이것이 함수를 사용하는 가장 큰 이유입니다. 또한, 구조를 파악하기 쉬워지고 구성요소를 덩어리로 나눠둔 것이기에 부분부분 디버깅하기에도 상당히 용이해집니다.


4. 마치며

개인적으로, 짧은 코드는 상관이 없지만 긴 코드를 작성하게 되신다면, 미리 구상하는 단계에서부터 함수 사용을 고려하시는 것을 추천해드립니다.

덩어리를 나누면 가독성이 올라가며, 유지 보수가 쉬워지고, 코드 재활용률이 올라가 용량적 이득도 취하며, 여러분들이 작성한 코드를 디버깅하기에도 훨씬 용이합니다. 간단하지만 중요한 내용인 만큼, 의식적으로 여러 예제나 실전 문제 상황에서 함수를 사용해보시길 추천합니다. 추후에 다룰 모듈화 또한 같은 이유로 코드를 작성하실 때 이용하시길 권장합니다. 다음 시간에 다시 뵙겠습니다. 감사합니다.


도움이 되셨다면 아래 하트 버튼을 눌러주세요! :D

이 글을 무단으로 수정, 개시하지 마십시오. 본 내용은 작성자 본인이 직접 작성하였음을 알려드립니다.