함수는 기능을 수행하는 코드 단위를 말합니다. 지금까지 봐왔던 main, printf, scanf 모두 함수입니다. printf, scanf는 특정 기능을 미리 약속하고 프로그램에서 바로 사용할 수 있게 구현되어 있는 표준 라이브러리 함수입니다. 이 외에도 자주 사용하는 코드를 함수로 만들어 필요할 때 사용할 수 있습니다. 함수를 만들려면 다음의 세 가지가 중요합니다.
- 함수 선언 : 프로그램 상단에 컴파일러에 어떤 함수를 사용할 것이라고 정보를 주는 역할
- 함수 호출 : 함수를 사용하기 위한 호출
- 함수 정의 : 함수를 실제 코드로 만드는 것, 함수의 기능을 구현
보통 위에 쓴 순서대로 작성하지만, 함수 선언을 제외하고 함수 호출과 함수 정의만 작성할 땐 함수 정의를 먼저 작성한 뒤에 호출해야 합니다.
함수 선언
함수 선언은 main 함수 앞에 작성하여 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 합니다. 선언 방법은 다음과 같습니다.
int sum(int a, int b);
// int : 반환형
// sum : 함수명
// int a, int b : 매개변수
함수를 만드는데는 위와 같이 반환형, 기능 이름, 매개 변수 이 세 가지가 필요합니다. 이렇게 필요한 세 가지가 어우러져 함수 원형을 만들어 냅니다. 함수 선언은 함수 원형;의 형태를 가지고 있습니다.
함수 정의
함수 원형의 모습이 낯설지 않을 겁니다. 바로 main함수와 많이 닮아 있습니다. 지금까지 사용했던 main 함수의 모습과 함께 비교하도록 하겠습니다.
// main 함수
int main(void){
...
return 0;
}
// 함수 원형
int sum(int a, int b)
// 함수 선언
int sum(int a, int b);
// 함수 정의
int sum(int a, int b){
return a + b;
}
매우 비슷한 것을 확인하실 수 있습니다. 함수 원형에 ;가 붙으면 함수 선언, {}가 붙으면 함수 정의, 함수명이 main이고 중괄호를 붙인 것이 main함수 입니다.
함수도 똑같습니다. 반환형에 맞게 return 해주고 함수명에 맞는 기능을 구현하고, 그에 필요한 매개변수를 선언해주면 됩니다.
함수 호출과 반환
지금까지는 함수를 만들기만 했습니다. 이제 만든 함수를 사용하는 법에 대해서 소개해 드리겠습니다.
함수 호출
함수를 호출할 때는 이름을 사용하며, 함수에 필요한 데이터를 괄호 안에 넣어주는데 이를 인수(argument)라고 합니다.
int result = sum(100, 200);
위의 코드를 예시로 설명해드리겠습니다. int result는 함수의 반환값을 저장하기 위한 변수입니다. 그리고 sum(100, 200)이 함수를 호출한 것입니다. 100과 200이 인수이며 매개 변수에 순서대로 복사되어 사용이 됩니다.
함수 반환
호출된 함수의 실행이 끝나고 값을 반환할 때 return문을 사용합니다. 위에서 나열한 코드를 보시면 return a + b; 가 보이는데 매개변수 a, b를 더한 값을 반환해주겠다는 뜻입니다. 결국 sum(100, 200)은 100과 200을 더한 값, 300이 출력이 되어 int result에 저장이 될 것입니다.