프로그래머라면 코드를 작성하고, 코드를 작성하면 함수를 사용하게 됩니다. 그리고 함수를 사용할 때마다 return 문과 exit 문을 자연스럽게 접하게 되죠. 이번 글에서는 return 문과 exit 문이 각각 어떤 역할을 하는지, 그리고 두 문장 사이에는 어떤 차이가 있는지 자세히 살펴보겠습니다.
C++에서 return과 exit의 기본 개념
- return: 실행 흐름의 제어권을 해당 함수를 호출한(calling) 함수로 되돌려주는 문장입니다.
- exit: 사용된 지점에서 프로그램 전체를 즉시 종료시키는 문장입니다.
int main()
main() 함수는 프로그램 실행이 시작되는 진입점(entry point)입니다. 프로그램은 main() 함수부터 실행되며, 반환 타입이 int로 선언되어 있기 때문에 반드시 정수 값을 반환해야 합니다. 이 정수 값은 프로그램의 실행 상태를 나타내는데, 일반적으로 0은 프로그램이 성공적으로 실행되었음을 의미하고, 0이 아닌 값은 코드 실행 중 오류가 발생했음을 의미합니다.
main() 함수에서의 return 문
return 문은 항상 제어 흐름을 함수를 호출한 쪽으로 되돌려줍니다. return은 정수형(int) 종료 코드(exit code)를 사용해 호출한 함수에 값을 전달합니다. main 함수에서 return 문을 사용한다는 것은 곧 상태 코드와 함께 프로그램을 종료하는 것을 의미합니다. 예를 들어 return 0;은 운영체제에 상태 코드 0을 반환하는 것입니다.
다음은 return 문을 사용하는 C++ 프로그램 예제입니다.
예제 코드
#include <iostream>
using namespace std;
class Test {
public:
// 생성자 활성화
Test() {
cout<<"Hey this is Return Constructor \n";
}
// 소멸자 활성화
~Test() {
cout<<"Hey this is return Destructor";
}
};
int main() {
// Test 클래스 객체 생성
Test object;
// main에서 return 사용
return 0;
}
실행 결과
Hey this is Return Constructor Hey this is return Destructor
위 프로그램의 실행 결과를 보면, return 문이 클래스 객체의 생성자와 소멸자를 모두 호출했음을 알 수 있습니다. 특히 소멸자 호출은 할당된 메모리를 해제하는 데 필수적이므로 매우 중요합니다.
main 함수에서의 exit() 문
exit() 문은 사용된 지점에서 프로그램을 즉시 종료시킵니다. main 함수에서 exit 키워드를 사용하면, 지역 범위(local scope) 객체들의 소멸자를 호출하지 않고 프로그램을 종료합니다. 즉, 생성된 객체들이 파괴되지 않고 메모리도 해제되지 않은 채 프로그램만 종료되는 것입니다.
예제 코드
#include <iostream>
using namespace std;
class Test {
public:
// 생성자 활성화
Test() {
cout<<"Hey this is exit Constructor \n";
}
// 소멸자 활성화
~Test() {
cout<<"Hey this is exit Destructor";
}
};
int main() {
// Test 클래스 객체 생성
Test object;
// main에서 exit() 사용
exit(0);
}
실행 결과
Hey this is exit Constructor
실행 결과를 보면, exit 키워드를 사용한 경우 생성자는 호출되었지만 소멸자는 호출되지 않았습니다. 즉, exit()를 사용하면 할당된 메모리를 해제하거나 지역 범위 객체를 파괴하기 위한 소멸자가 호출되지 않은 채 프로그램이 종료됩니다.
결론
이번 글에서는 return 문과 exit 문의 차이점을 알아보았습니다. 두 문장의 차이를 통해, 어떤 것을 선택하느냐에 따라 프로그램의 동작에 큰 차이가 생긴다는 것을 확인할 수 있습니다. 특히 return 대신 exit를 사용할 때는 주의가 필요합니다. 짧은 한 페이지 분량의 코드에서는 큰 영향이 없을 수 있지만, 실제 소프트웨어를 개발할 때는 리소스 누수 등 심각한 문제로 이어질 수 있습니다. 이 글이 여러분의 학습에 도움이 되기를 바랍니다.