오늘은 c언어 fuction(사용자 정의 함수)의 실제 사용법에 대해서 알아보려고 합니다. 지난 시간에 함수의 형태나 함수의 기본적인 사용법등 사용자 정의 함수의 기초내용은 알아보았으니 처음 오신 분들은 아래 포스팅을 먼저 참고 해 주시기 바랍니다.
https://mech19.tistory.com/198
C언어 Function 기초 (사용자 정의 함수)
오늘은 c언어의 Function(함수)에 대해서 이야기를 해 보겠습니다. 함수란 무엇인지 다들 잘 알고 계시지요? 어릴 때 많이 배웠습니다. "y=f(x)" 기억나시는지요. 여기서 x에 넣는 값에 따라 y의 값이
mech19.tistory.com
먼저 함수의 return(리턴)값에 대해서 이야기를 해 보겠습니다.
위와 같은 예제를 가정 해 보겠습니다. 이전 포스팅을 보고 오신 분이라면 전혀 새로운 내용은 없으니 설명은 건너뛰도록 하겠습니다. 일단 위의 예제에서 사용자 정의 함수 fa는 아무 것도 하지 않고 0을 리턴하고 끝납니다. 이걸 메인함수의 변수 a에 대입하여 a를 출력하면 무슨 값이 출력될까요?
네. 바로 0이 출력 됩니다. 변수 a에 대입한 것이 함수 fa 그 자체였죠? 그럼 이게 무슨 의미일까요? 함수 내부에서 실행되는 내부 프로그램과는 상관없이 함수는 리턴값을 가지고 있다는 의미입니다. 이해가 잘 안가시나요?
사용자 정의 함수 fa의 리턴값을 100으로 바꾸면 100이 출력됩니다. 1000으로 바꾸면 1000이 출력되겠지요. 일단 함수는 내부에 만들어진 프로그램이 어떤것이든지 그걸 수행나고 나서 최종적으로 return(리턴값)을 가지고 종료된다는 것을 기억하시기 바랍니다. 그리고 이 return(리턴)값은 함수의 자료형에 따라 결정되어 집니다. 즉 우리가 함수를 선언할 때 변수때와 마찬가지로 함수 이름앞에 int(정수)라고 자료형의 타입을 지정했기 때문에 정수타입의 값을 return(리턴, 반환)해야 합니다.
그리고 우리가 계속 사용 해 왔던 main함수도 함수라는 것을 기억해야 합니다. 그래서 main함수에도 return(리턴)값이 존재하지요. 참고로 main함수의 리턴값은 사용하는 OS가 받습니다.
그럼 한가지 더 중요한 사실을 이야기 해 보겠습니다. 사용자 정의 함수에서도 우리가 계산을 한다던가 출력을 한다던가 할 때 변수를 선언해야 할텐데 이 변수를 main함수 혹은 다른 사용자 정의 함수와 공유할 수 있을까요? 오늘 이야기 할 내용이 많으니 결과부터 이야기 하자면 안됩니다. 그럼 사용자 정의 함수와 main함수 사이에 데이터를 주고 받기 위해서는 어떻게 해야 할까요? 이게 오늘 이야기 할 핵심 주제 입니다. 시작하겠습니다.
우리가 매일 사과를 딴다고 가정해 보겠습니다. 이 사과를 수확하고 나서 어제까지 수확한 사과와 갯수를 더해야 전체 사과 갯수가 나오겠지요?? 이렇게 오늘 수확한 사과 갯수를 입력하면 자동으로 더해주는 프로그램을 만들어 보겠습니다. 여기서 어제까지 수확한 사과갯수의 데이터는 main함수에서 가지고 있고, 오늘 수확한 사과갯수의 데이터는 사용자 정의 함수에서 가지고 있게 하여 더하는 프로그램입니다.
위 예제에서 저는 apple_function이라는 사용자 정의 함수를 만들어 금일 수확한 사과의 양을 입력받게 만들었으며, 입력받은 금일 수확한 사과의 양을 이전까지 수확해 놓았던 전체 사과의 양에 더해서 리턴값으로 지정해서 함수가 종료될 때 반환되도록 작성하였습니다.
그리고 main함수에서는 이전까지 수확해 놓았던 전체 사과의 양을 100개로 지정해 두었으며, 사용자 정의 함수 apple_function을 호출하여 오늘 수확한 사과의 양을 더한 뒤 출력하도록 작성하였습니다. 여기서 핵심적인 부분은 main함수에 있는 이전까지 수확해 놓았던 전체 사과의 양 100개에 대한 데이터를 사용자 정의 함수 apple_function에 전달하였다가 apple_function에서 금일 수확한 사과의 양을 더한 뒤에 출력하는 부분입니다.
먼저 main함수에서 선언한 apple이라는 변수에 이전까지 수확해 놓았던 전체 사과의 양 100개라는 데이터 값을 저장하였습니다.
그리고 이 값을 사용자 정의 함수 apple_function으로 옮겨야 하겠죠? 그건 아래와 같이 해결하면 됩니다.
사용자 정의 함수 apple_function을 호출하면서 소괄호 안에 main함수의 변수 apple을 입력하였습니다. 이렇게 사용하는 소괄호 안의 것을 함수의 매개변수 혹은 인자라고 합니다. 즉, 우리는 이 매개변수 혹은 인자를 통하여 main함수와 사용자 정의 함수 간에 데이터를 주고 받을 수 있는 것이지요.
그리고 한가지 더 있습니다. 사용자 정의 함수에서 계산 된 최종 결과값을 다시 main함수로 가지고 와야 합니다. 이건 아래와 같이 해결하면 됩니다.
바로 사용자 정의 함수에서 계산 된 최종 결과값을 return(리턴)값으로 사용하는 방법 입니다. 이렇게 하면 main함수에서 호출된 사용자 정의 함수는 최종 결과값만을 남기기 때문에 우리가 간단하게 계산 결과값을 사용할 수 있게 됩니다. 그럼 위 예제의 실행결과를 한번 볼까요?
금일 수확한 사과의 양을 30개로 입력했더니 정확하게 100개와 더해져서 총 수확한 사과의 양이 130개라고 출력되었습니다. 그럼 여기서 한가지 더 응용해서 사용해 볼까요? 반복문을 사용하여 계속 잔여수량을 남기는 프로그램을 만들어 보겠습니다.
간단하게 설명하도록 하겠습니다. for무한반복문을 사용하여 main함수의 변수 apple에 사용자 정의 함수 apple_fuction을 대입하는 방법으로 계속 누적하여 수확한 사과 총 수량 데이터를 저장하였습니다. 그럼 실행해 보도록 하겠습니다.
정상적으로 잘 작동하네요. 사용한 함수나 변수의 자료형이 int(정수)이기 때문에 마이너스 값도 사용 가능하여 -40을 입력하자 수량이 줄어든 것도 확인 할 수 있습니다. 함수는 이렇게 사용하면 됩니다. 오늘은 여기까지 입니다. 다음시간에 더 다양한 함수의 응용방법에 대해서 알아보도록 하겠습니다. 감사합니다.
제 블로그를 방문해 주셔서 감사합니다.
도움이 되셨다면 공감(좋아요) 부탁드리고,
댓글은 다른분들께도 좋은 정보일 수 있으니
공개로 부탁드립니다.
여러분의 작은 정성이 좋은 포스팅을 생산하는
힘이 된답니다. :)
감사합니다.
'PROGRAMMING > C' 카테고리의 다른 글
C언어 함수의 원형 (0) | 2022.11.21 |
---|---|
C언어 Function 응용 #1 (사용자 정의 함수) (1) | 2022.11.16 |
C언어 Function 기초 (사용자 정의 함수) (0) | 2022.11.09 |
C언어 포인터 심화과정 (배열포인터, 포인터배열) (0) | 2022.11.03 |
C언어 포인터 심화과정 (배열과 포인터, 포인터의 포인터) (0) | 2022.11.02 |
댓글