Seung's Learning Record

[ C++ ] 함수 (Function) 본문

프로그래밍/C++

[ C++ ] 함수 (Function)

70_0ewd 2023. 10. 29. 01:39

구현해야하는 모든 함수들을 main함수에 작성하면 어떻게 될까? 100줄이 넘지 않는 코드라면 큰 문제까지는 없을 것이다. 하지만 코드가 점점 늘어나고, 구현해야하는 기능들이 많아진다면 하나의 함수에 모두 작성하기가 어려울 것이다. 그 때문에 기능 등의 단위로 코드를 나누어 짜는것이 중요하며, 이를 위해 함수라는 것이 존재한다. 함수를 사용하면 코드의 재사용이 가능하기 때문에 훨씬 쉽고 효율적으로 코딩을 할 수 있다. 함수는 크게 두가지로 분류된다. 이미 다른사람들이 만들어놓은 라이브러리 함수와 직접 만들어 사용하는 사용자 정의 함수가 있다. 


라이브러리 함수

라이브러리 함수는 미리 만들어져서 제공되는 함수로, printf()와 같은 것들이 있다. 라이브러리 함수를 사용하기 위해선 해당 함수의 정보가 들어있는 헤더 파일을 #include 해줘야 한다. 표준 입출력, 수학 연산, 문자열 처리, 시간 처리, 오류 처리, 데이터 검색 및 정렬 등 여러 기능들을 라이브러리 함수를 사용함으로써 쉽게 사용할 수 있다.

 


사용자 정의 함수

라이브러리 함수로 해결할 수 없을 땐, 직접 함수를 만들어서 사용할 수 있다. 함수를 만들기에 앞서 구현하고자 하는 기능을 명확히 아는것이 중요하다. 어떠한 매개변수를 입력값으로 주는지, 어떠한 반환값을 얻을것인지 등을 제대로 알아야 올바른 함수를 구현할 수 있을 것 이다.  이때 함수는 크게 선언부, 정의부, 호출부나누어 구현할 수 있다. 정의부와 호출부만 구현해도 되지만, main함수는 상단에 위치하는것이 더 좋기 때문에 선언부를 코드의 최상단에 적어두고 이후에 정의부를 작성하면, 가독성이 올라가고 실수도 줄게된다.

선언부

함수의 몸체를 작성하지 않고 정보만 알려줌으로써 main 함수에게 함수의 존재를 알리는 역할을 한다. 선언부에 포함되야하는 정보로는 함수명, 반환타입, 매개변수의 개수와 타입이 있다.

int Add(int,int);

정의부

선언부에서 작성한 함수를 몸체까지 완전히 구현하는 부분이다. 선언부나 호출부에 적은 함수가 정의부가 없을 경우 프로그램은 실행되지 않는다.

int Add(int x, int y){
	return x+y;
}

호출부

호출부는 말 그대로 함수를 사용할 때 작성되는 코드이다. 이때 호출되는 함수의 선언부가 호출하는 함수보다 위에 작성되어야 함을 주의하자. 함수를 호출할 땐 정의부와 선언부에 작성한 명세에 맞게 매개변수를 전달해줘야하며 반환값의 유무 또한 잘 알아둬야한다.

int main(void){
    cout << Add(5,10) << endl;

}

함수 인자

void func1(int a){
    a=5;
}

int main(void){
    int t=0;
    func1(t);
    cout << t;
}

func1 함수에 t를 넣으면 어떤 값이 출력될까? 답은 0이다. 함수의 인자로 값이 넘어갈땐 변수가 복사된 값이 넘어가게된다. 따라서 func1에서 값이 바뀐다해도 원본에는 아무 영향도 끼치지않게된다. 

이를 방지하기 위해서 포인터나 &참조자를 사용할 수 있다. 또한 배열의 경우에는 인자로 넘어가면 원본의 값이 같이 변하는 반면 c++에서 제공하는 vector나 구조체 변수들은 원본의 값이 변하지 않는다는 점도 기억해두자.

'프로그래밍 > C++' 카테고리의 다른 글

[ C++ ] 배열과 vector  (0) 2023.10.31
[ C++ ] 정렬 함수 sort  (1) 2023.10.30
[ C++ ] 조건문  (1) 2023.10.28
[ C++ ] 표준 입출력  (0) 2023.10.28
[ C++ ] 데이터의 형변환  (1) 2023.10.26