이번 시간에는 프로그래밍 입문자들이 어려워 하는 함수 생성하는 과정에 대해 살펴보겠습니다. 여기서는 함수 구현이 아닌 함수 선언부를 어떻게 작성하는가에 대해 살펴볼것입니다. 먼저 함수를 생성할 때 다음 질문들을 고려해야 합니다.

  • 함수명은 어떻게 지어야 하는가?
  • 매개변수(또는 인자)는 어떤 것으로 설정해야 하는가?
  • 리턴값은 어떤 것으로 설정해야 하는가?

 위 질문들의 답을 살펴보면서 함수 생성하는 과정에 대해 살펴보겠습니다.

1. 함수명은 어떻게 지어야 하는가?

 함수명은 해당 함수명을 보고 기능이 유추가능하도록 의미있게 짓는 것이 좋습니다. 우리가 자주 쓰는 printf()함수를 보면 출력과 관련된 기능이라는 것을 유추할 수 있습니다. 만약 기능은 콘솔화면에 문자열을 출력하는 기능인데 함수 명을 scanf()로 짓는다면 해당 함수를 사용하는 입장에서는 황당할 수 있습니다.

2. 매개변수는 어떤 것으로 설정해야 하는가?

 매개변수는 함수를 실행하기 위해 필요한 정보인 입력에 해당합니다. 그리고 필수적이인 정보들을 매개변수로 설정해야합니다. 아래 예시를 보면서 매개변수를 어떻게 설정해야 하는지 생각해봅시다.

 상황1

  • 선생님 : A학생 두 수를 더해보세요.
  • A학생 : 더해야 하는 두 수가 뭐죠?

 상황2

  • 선생님 : A학생 두 수 1과 2를 더해보세요.
  • A학생 : 3입니다.

 상황3

  • 선생님 : A학생 두 수 1과 2와 3을 더해보세요.
  • A학생 : 두 수가 아니라 세 수인데요?

 위의 상황들을 살펴보면 선생님의 질문으로 가장 옳은 상황은 상황 2라는 것을 알 수 있습니다. 상황 1은 정보가 적어서 문제가 발생하고 상황 3은 정보가 너무 많아서 문제가 발생합니다. 매개변수도 마찬가지입니다. 상황 1과 같이 정보가 적으면 동작을 실행할 수 없고 상황 3처럼 많으면 동작은 실행되지만 불필요한 정보를 전달하게 됩니다.

 하지만 함수의 재사용성을 위해 상황에 따라서는 매개변수가 늘어 날수 있습니다. 아래 예시를 통해 함수의 재사용성을 위해 매개변수가 추가된 상황을 살펴봅시다.

  • void printStar1() : *을 5개 찍어주는 함수
  • void printStar2(char star) : star문자열을 5개 찍어주는 함수
  • void printStar3(char star, int count) : star문자열을 count개 찍어주는 함수

 위 함수들중에서 문제점은 다음과 같습니다.

  • printStar1()에서 출력하는 모양이 *이 아닌 ☆을 출력하고 싶다면 새로운 함수를 만들어야 한다.
  • printStar2()에서 찍어주는 갯수를 5개가 아닌 6개를 하고 싶다면 새로운 함수를 만들어야 한다.

 따라서 printStar3()처럼 재사용성을 위해 매개변수가 늘어날 수 있습니다.

3. 리턴값은 어떤것으로 설정해야 하는가?

 리턴값은 해당 함수를 호출한 함수가 원하는 값으로 설정해야합니다. 예를 들면 두 정수를 더해서 콘솔에 출력하는 함수가 있다면 해당 함수는 콘솔에 출력하고 끝내면 되기 때문에 리턴값이 void입니다. 하지만 두 정수를 더해서 해당 결과를 알려주는 함수가 있다면 리턴값은 두 정수의 합인 int가 됩니다.

4. 함수를 만드는 과정

  1. 생성하려는 함수의 기능을 최대한 자세히 풀어씁니다.
  2. 풀어쓴 기능에서 매개변수, 리턴값을 설정합니다.
  3. 함수명을 설정합니다.
  4. 함수 선언부를 작성하고 구현합니다.
  5. 생성한 함수를 main함수에서 테스트합니다.

 아래 예시는 위 과정을 토대로 만들어진 두 정수의 합을 구하는 함수입니다.

1
2
3
4
5
6
7
8
9
10
11
12
/*
기능 : 두 정수 num1과 num2가 주어지면 두 정수의 합을 알려주는 함수
매개변수 : 두 정수 num1,num2 => int num1, int num2
리턴타입 : 두 정수의 합 => int
함수이름 : sum
함수선언 
리턴타입 함수이름(매개변수)
*/
int sum(int num1, int num2){
  return num1 + num2;
}
 
 
 

 이상으로 함수 생성 과정에 대해 마치도록 하겠습니다. 질문이 있으시면 댓글에 남겨주세요. 긴 글을 읽어주셔서 감사합니다.

+ Recent posts