Nagie's DevStory
[C] 20. 함수 사용하기 본문
프로그래밍에서의 함수는 수학의 함수와 비슷한 개념을 가지고 있지만 목적과 구현 방식에서의 차이가 있다.
주로 작업을 수행하고 모듈화하기 위해 사용되며
수학의 함수와는 다르게 다양한 입력과 출력을 처리하고 부수 효과를 가진다.
목적을 비교하자면 수학에서의 함수는 입력값을 받아 출력값을 무조건 반환하는 대에 비해
프로그래밍에서의 함수는 그냥 일종의 기능을 이루는 코드 덩어리다 거기다 입력이 있다고 무조건 반환하지도 않는다.
그리고 프로그래밍에서의 함수는 함수가 외부의 변수를 변경한다거나 하는
일종의 관여가 가능하며 외부 상태에 영향을 미친다.
수학에서의 함수는 그런 게 없다. 즉 외부 상태에 영향을 미치지 않는다는 것이다.
이것 외에도 다형성과 같은 차이점이 더 존재하지만
둘 다 입력값을 기준으로 어떤 결과를 도출한다는 목적은 동일하다고 보면 될 거 같다.
C에서의 함수 정의는 아래의 코드처럼 정의할 수 있다.
[반환 데이터 형식] [함수이름](인자) {
// 함수 본문
}
// 사용 예시
int myfunction (int a) {
return a;
}
반환 데이터는 함수가 제 역할을 끝냈을 때 반환할 데이터의 형식이다.
실수를 반환한다면 float이나 double
정수를 반환한다면 int 나 long long 같은 게 올 것이다.
그리고 함수 이름은 다른 코드에서 만들어 둔 함수를 호출할 때 쓰이며
인자는 함수호출시 넘겨주는 일종의 데이터다.
함수를 호출하는 방법은 아래와 같다.
함수이름(인수);
//사용 예시
//반환값이 없을때
myfunction(10);
//반환값이 있을때
int myNumber = myfunction(10);
함수 역시 반환 형식을 변수의 자료형처럼 사용할 수 있으며
아무런 반환이 없으면 채워 넣어야 할 자리를 비워두거나 void 키워드를 넣어준다.
거기다 프로그래밍에서의 함수는 자기 자신을 호출하는 '재귀 호출'이란 게 가능한데
반복문처럼 반복 작업을 수행할 때 유용하게 써먹을 수 있다.
다만 재귀를 사용하게 된다면 스택의 메모리 상황을 잘 보고 판단해서 사용해야 하고
중간에 재귀를 빠져나올 조건문이 필요하다.
재귀를 빠져나올 조건문이 없다면 스택이 가득 차서 프로그램이 뻗을 때까지 반복하게 되며
조건문이 충족되었다 해도 너무 남발해선 안 된다.
스택의 메모리는 1MB기 때문에 아무런 대책 없이 사용하면 스택이 가득 차 스택 오버플로우 현상이 생길 수 있다.
재귀 호출(재귀 함수)의 사용은 아래와 같다.
[반환 데이터 형식] [함수이름](인자) {
// 함수 본문
[재귀 호출의 제어를 담당할 조건문];
[함수이름](인자);
}