• 1.3.1 함수(function)의 사용과 재사용성
  • 1.3.2 반환 값(Return Values)
  • 1.3.3 매개변수(Parameters)와 인자(Arguments)
  • 1.3.4 디버깅(debugging)

1.3.1 함수(function)의 사용과 재사용성

 

큰 프로그램을 만들다 보면 같은 계산을 반복하는 경우가 생길 수 있다. 이러한 계산이 만약 수정될 부분이 생겼다면 어떻게 해야 할까? 함수로 작성하지 않았다면 모든 부분을 찾아가서 하나하나 직접 수정해야 할 것이다. 하지만 수정 작업은 사람이라면 한두 개씩 빼먹고 수정을 하지 않는 경우도 생길 것이며, 이러한 실수는 치명적일 수 있다.

 

같은 작업을 하는 영역이 있다면 이를 하나로 묶어서 함수로 표현하면 좋다. 하나의 함수를 만들어서 이 함수 계산이 추후에 쓰인다면 이 함수를 호출해서 사용하면 그만이고 수정 작업이 필요할 때는 함수가 선언된 부분만 수정하면 될 것이다. 이렇게 다시 사용할 수 있도록 해주는 것을 우리는 재사용성이라고 부른다.

#include <iostream>

using namespace std;

int multiplyTwoNumbers(int num_a, int num_b)
{
	int mul = num_a * num_b;

	return mul;
}

int main()
{
	cout << multiplyTwoNumbers(7, 2) << endl;
	cout << multiplyTwoNumbers(3, 4) << endl;
	cout << multiplyTwoNumbers(8, 13) << endl;//함수 재사용이 가능하다

	return 0;
}

 

곱셈을 수행하는 함수이다. 이렇게 곱셈을 여러번 수행하고 싶다면 함수로 만들어서 프로그램을 구현할 수 있다. 또한 곱셈이 아닌 덧셈으로 수행하고자 하는 경우 함수 내부에 계산되는 부분만 수정하면 되겠다. 

Right click -> Rename

위처럼 함수를 마우스 오른쪽 클릭과 Rename으로 진입하면 함수 자체 이름과 해당 함수를 호출하는 부분에서의 이름까지 한 번에 수정할 수 있다.


1.3.2 반환값(Return Values)

 

return values

반환값이반환 값이 있느냐에 따라서 함수의 표현이 달라진다. multiplyTwoNumbers의 경우 int 자료형을 반환해주기 때문에 함수명 앞에 int가 붙어 있고 printHelloWorld의 경우엔 반환 값이 없기 때문에 void를 사용하였다. 

 

반환 값 여부에 대해서는 함수명 앞에 표기해줄 수 있지만 return 명령어를 사용할 수 없다는 것은 아니다. 두 번째 함수의 경우 return 명령어를 통해 Hello World2 출력을 못하도록 막았다. return에 도달하면서 해당 함수를 호출한 함수로 다시 넘어갔기 때문이다.

 

참고로 반환값이 void인 함수를 다른 자료형 메모리에 대입하는 형태로 코드를 구현할 경우 컴파일이 되지 않는다.


1.3.3 매개변수(Parameters)와 인자(Arguments)

 

많이 혼동하는 개념 중 하나가 매개변수인자라고 생각된다.

parameters and arguments

여기서 주의 깊게 볼 것은 addTwoNumbers 함수이다. main 함수 내부에서 addTwoNumbers(1, 2)로 호출을 진행하는데, 여기에 입력된 1과 2가 인자가 된다. 즉, 함수 호출 시에 입력으로 넣는 값이 인자이다. 함수 정의가 되어 있는 부분을 살펴보자. num_a와 num_b가 존재하는데, 프로그램을 실행해보면 알겠지만 1과 2를 받아서 덧셈을 수행하고 3을 반환한다. 즉, num_a와 num_b가 1과 2를 각각 받아서 사용했다는 의미인데, 여기 있는 num_a와 num_b를 매개변수라고 한다. 인자와 다를 것이 없다고 생각할 수 있지만, 인자는 값으로 함수가 받아오며, 이를 저장하고 사용할 공간이 따로 필요하다. 이러한 공간이 매개변수가 되며, 결과적으로 인자로 들어온 값을 복사해서 매개변수에 저장한 뒤 함수가 수행된다. 즉, 매개변수는 함수의 인자를 저장하는 변수가 되겠다.


1.3.4 디버깅(debugging)

앞에서 언급한 인자와 매개변수의 동작 방식에 대해서 알기 위해 디버깅을 수행할 필요가 있다.

debug mode

visual studio 상단에 debug 모드로 실행한 뒤에 함수 호출 부분에 디버깅을 위한 표식을 남기자. 코드 줄 숫자 표시 옆 회색 부분을 클릭하면 위의 사진처럼 디버깅을 위한 점이 생긴다. 그리고 F5를 클릭하여 디버깅을 시작해보자.

 

start debug mode

디버깅을 시작하고서 아래 Locals 파트를 보자. sum이라는 변수가 아직 값이 제대로 저장되어 있지 않아서 의미 없는 쓰레기 값이 저장된 것을 볼 수가 있다. F11을 눌러서 함수 내부 동작을 들여다보자.

F11을 통한 함수 내부 동작 확인

함수 내부로 들어왔다. Locals를 확인해보면 num_a와 num_b가 쓰레기 값으로 들어 있는 것을 알 수가 있다. 분명 인자로 7과 2를 주었는데, 다른 값이 저장되어 있다. 즉, 매개변수는 현재 생성되어 있기만 하고 인자에 들어 있는 값을 복사받지 못했다는 의미가 된다. 이렇게 매개변수와 인자는 다르다는 것을 알 수가 있다. F11을 계속 눌러주면서 해당 값들이 어떻게 변하는지 확인하면 좋은 공부가 된다.

+ Recent posts