본문 바로가기

교육 노트/C++ 기초강의

[C++ 때려 잡기] C++ 기초강의 2-1 함수의 선언과 정의

프로그램을 만들다보면 중복해서 사용되는 기능들이 나오게되고

이걸 죄다 복붙을 통하여 해결하다보면 코드가 지저분해지고 길어지게 된다.


C/C++에서는 이러한 기능을 묶어 재사용할수있도록 일종의 모듈화가 가능한데

그것이 바로 함수이다


1.함수란


특정한 기능을 수행하도록 나눠진 작업 단위,
수학에서의 함수와 비슷한 의미를 가진다.


C++ 에서 함수는 다음과 같은 구조를 가진다

<리턴타입> <함수이름> (<매개변수>)

{

  <함수 본문(내용)>

  return <리턴값>;

}

리턴타입은 돌려주는 리턴값이 어떤 변수 타입인지를 의미하고

매개변수느느 해당 함수에 넘겨줄 값을 의미한다.


위 구조대로 들어온 값에 1을 더하는 기능을 하는 함수를 만들어보면


int plusOne(int x)

{

int y = x + 1;

return y;

}


다음과 같다.

대충 이러한 구조를 띄는데


함수를 사용할때는 함수이름(매개변수)와 같이 사용하며 이를 함수를 호출한다고 한다.

위 함수를 사용한다고하면

int a = plusOne(10);

을 하면 plusOne 함수에 10이 매개변수로 들어가고 11이 리턴되며

11은 그 함수가 호출된 자리로 돌아간다.

즉 int a = 11이 되고 a는 11이 된다.

아래의 plus함수가 동작되는 과정을




2.함수의 선언과 정의


함수는 해당 함수를 사용하지 전에 미리 존재 해야한다.


여기서 함수의 내용을 적는것을 함수 정의라고 한다.

즉 컴파일 에러가 뜨는 경우는 함수 정의가 되어있지 않아 컴파일 에러가 발생하는것이다.

이를 해결하기위해서는 함수 정의를 위로 올리면 된다.

그러나 이러한 방식은 다음과 같은 문제를 발생시킨다.


간단한 사칙연산 팜수만 제작했어도 main 함수가 저 밑으로 떨어지게된다.

몇백줄 짜리 함수를 몇개만 추가하면 main 은 함수는 더 밑으로 떨어지게된다.


이러한 문제를 해결하기위해 C++ 은 함수의 선언과 정의를 분리할수있다.

선언은 단순히 내가 이러한 함수를 쓸것이라고 알리는것이고

정의는 해당 함수의 내용을 정의하는것이다



함수를 선언과 정의부로 분리하면

다음과 같이 사용할수있다.


예를 들면 다음과 같다


한번 사칙연산 기능을 각각 함수로 구현해서 사용해 보아라.



ps. 본문에서는 편의상 plus로 명명 했지만 plus함수의경우 표준 plus함수와 이름이 곂치는 경우가 있으므로

"plus"이 모호합니다 같은 오류가 발생하면 함수이름을 바꾸어주도록하자.

728x90