본문 바로가기
C언어

세이버의 C언어 강의 20강_ 함수란 무엇인가

by 비원(Be one) 2019. 5. 4.
반응형

여러분 안녕하세요. 세이버입니다.

 

이번 강에서는 함수에 대해 소개해드리려 합니다.

 

저장된 글이 날라가서 두번째 쓰는겁니다...


1. 함수란?

중고등학생 분들은 함수라는 용어를 수학 시간에 많이 들어보셨을 겁니다.

수학에서의 함수는 x와 y의 관계식으로, x의 값에 따라 y의 값이 달라지게 됩니다.

 

컴퓨터 언어에서의 함수는 수학에서의 함수와 같이 입력(x)과 출력(y)이 있다는 점에서 비슷하지만,

정의 측면에서 차이점을 가집니다.

 

컴퓨터 언어에서의 함수는 특정한 작업을 수행하는 코드의 집합체입니다.

예를 들어 printf 함수는 출력을 하기 위한 코드의 집합체이고, for 함수 역시 반복을 위한 코들의 집합체입니다.

 

지금까지 실습으로 소개해드린 함수들은 모두 기존에 정의된 함수들이었습니다.

이렇게 기존에 정의되어 제공되는 함수를 표준 라이브러리 함수라고 합니다.

stdio.h와 같은 헤더 파일을 추가한 후, 그 헤더 파일에 있는 함수들을 사용하면 됩니다.

 

반면에 프로그래머가 프로그램의 요구에 맞춰 직접 함수를 만들 수 있습니다.

이를 사용자 정의 라이브러리 함수라고 합니다.

 

이제 함수 만드는 법을 소개해드리겠습니다.

 

2. 함수의 구성요소와 형태

함수의 요소는 출력 타입, 이름, 입력 타입, 기능으로 나뉘며, 형태는 다음과 같습니다.


함수의 형태


위 함수는 출력 타입이 int이고, 입력 타입이 int인 sum이라는 이름의 함수입니다.

sum 함수의 기능은 입력한 수에 10을 더한 후 반환을 하는 것입니다.

 

여기서 입력 타입은 매개변수(parameter)라고도 하며, 한 함수에 두 개 이상의 입력 타입을 가질 수 있습니다.

int sum(int a, int b) 이런 식으로 두 개 이상의 입력 타입을 가질 때는 ,로 구분합니다.

 

 

3. 함수의 사용

함수의 사용법은 예제로 보여드리겠습니다.

 

 

3줄에서 8줄까지 sum 함수를 정의하였고, main함수의 영역인 18줄에서 sum 함수를 호출하였습니다.

함수를 호출한다는 것은 함수를 사용한다는 의미입니다.

 

sum 함수의 입력 타입이 num이므로, 변수 num에 입력된 값이 sum 함수의 변수 a로 대입됩니다.

sum 함수에서 a에 10이 더해지고 return을 통해 a의 값이 다시 main 함수로 넘어감으로써

변수 result에는 변수 num보다 10이 더해진 값이 대입되게 되는 것입니다.

 

 

3. return이란??

return은 함수를 호출한 곳으로 값을 보낸다는 의미의 예약어입니다.

 

위의 예제에서 main 함수에서 sum을 호출했습니다.

그래서 return a는 sum 함수를 호출한 main 함수에게 변수 a의 값을 보낸다는 뜻입니다.

 

출력 타입이 없는 함수의 경우는 return 값이 없을 수 있습니다.

 

또한, C언어에서는 한 함수당 return값이 반드시 하나여야 합니다.

return값이 하나인 이유로 몇 가지 문제들이 생기지만, 이 문제는 추후에 다루도록 하겠습니다.

 

또한, return을 수행한 이후로는 함수가 호출된 부분으로 이동하기 때문에 뒤의 코드가 실행되지 않습니다.

 

7줄에 return이 수행되면서 main 함수로 돌아가기 때문에 9줄의 printf 함수는 실행되지 않습니다.

 

4. 함수의 장점

그렇다면 함수는 왜 사용하는 걸까요??

 

위 코드는 두 수를 입력받은 후 더하는 과정을 세 번 반복하고 있습니다.

또한 코드에서 9줄~14줄, 16줄~21줄, 23줄~28줄은 모두 같은 코드들입니다.

 

위 코드를 함수로 세분화하면 다음과 같습니다.

 

반복되는 코드들을 sum 함수에 넣음으로써 코드를 간결하게 만들었습니다.

 

이처럼 함수를 사용하면 코드의 반복되는 부분을 묶음으로써 가독성이 높아집니다.

또한 만들어진 함수를 재사용하여 다양한 쓰임에 맞게 사용할 수 있다는 것도 장점입니다.

 

만약 main 함수만으로 1000줄이 넘는 코드를 작성한다고 가정합시다.

코드가 잘 실행되면 문제가 없지만, 에러가 나면 어디서 에러가 났는지 확인하는데 어려움이 듭니다.

그러나 함수로 세분화를 시켰다면, 에러가 난 함수만 확인하여 금방 수정할 수 있다는 장점이 있습니다.

 

5. 주의할 점

함수를 사용하면서 주의할 것은 함수의 위치입니다. 함수의 위치는 main 함수보다 위에 있어야 합니다.

 

C언어는 절차 지향 언어이기에 코드를 위에서부터 차례로 수행시키며 내려옵니다.

그런데 함수가 main 함수보다 아래에 있다면 컴파일러 입장에서는 정의되지 않는 함수가 기입되어 있다고 판단하여

에러를 발생시키게 됩니다.

 

아마 위와 같이 작성하시고 실행하셔도 별문제 없이 코드가 실행되실 겁니다.

 

???????????????????????????????????????????????????

 

오류 없이 실행되는 이유는 대부분의 컴파일러는 C언어와 C++ 언어를 겸용으로 지원하기 때문입니다.

C++ 언어는 객체지향 언어이기에 main 함수 아래에 함수가 있어도 인식할 수 있기 때문입니다.

하지만 C언어만 지원하는 컴파일러에서는 오류가 발생하게 됩니다.

 

만약 main 함수 아래에 함수를 기입하고 싶다면 main 함수 위에 함수의 이름을 적어둠으로써 컴파일러에게

이러한 함수가 있다는 것을 알려줘야 합니다.

 


이번 강의는 여기까지입니다.

 

오늘도 수고하셨습니다.

 


정리

- 함수 : 특정한 작업을 수행하는 코드의 집합체

- 함수의 구성 요소 : 출력 타입, 이름, 입력 타입, 기능
- return : 함수를 호출한 곳으로 값을 보낸다는 의미

            출력 타입이 없는 함수의 경우는 return이 없을 수 있다.

            return 되는 값은 무조건 하나여야 한다. 

            return을 수행한 이후의 코드는 실행되지 않는다.
- 함수의 장점

   1. 코드의 반복되는 부분을 묶음으로써 가독성이 높아집니다.
   2. 함수를 재사용하여 다양한 쓰임에 맞게 사용할 수 있다는 것
   3. 에러를 알아내고 수정하기 쉽다.
- 함수는 main 함수보다 위에 있어야 한다.
- 함수의 이름을 main 함수 위에 기입함으로써 컴파일러에게 알리면 main 함수 아래에 위치할 수 있다.


강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.

궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.

 

poci5003@gmail.com

 

 

반응형