모든 프로그램은 최소한 1개의 함수로 구성된다.
여기서 함수란 필요한 작업을 수행하는 프로그램 문장들을 하나의 단위로 모아 놓고, 이에 이름을 부여한 것이다.
이렇게 정의하여 놓은 함수는 프로그램의 다른 부분에서 필요할 때 호출하여 사용할 수 있다.
함수를 호출할 때에는 함수가 필요로 하는 데이터 또는 객체를 인수로 전달하여야 하며, 함수는 정의된 처리를 한 후 필요하면 그 결과를 호출한 문장으로 되돌려 준다.
하나의 함수에서는 고유한 기능만을 수행하는 것이 바람직하며, 그 이유는 기존의 프로그래밍 기법에서 프로그램을 간결하고 유지/보수하기 쉽도록 만들기 위해 사용되고 있다. 객체지향 프로그래밍에서는 이러한 목적과 함께 객체가 메시지를 처리하는 메서드를 구현하기 위한 방법으로 함수를 사용한다.
함수를 c++에서 정의하는 일반적인 형식은 다음과 같다.
ReturnType functionName(ParameterList)
{
Type localVar;
statement;
return returnExpression;
}
함수를 호출할 때에는 함수의 이름과 함께 필요한 인수를 전달한다.
functionName(aParameterList);
or
varName = functionName(aParameterList);
첫 번째 형식은 void형 함수나 반환된 값을 사용할 필요가 없을 때사용하며
두 번째 형식은 반환된 값을 사용하는 문장의 예시이다.
인수의 전달
c++ 언어에서는 값 호출과 더불어 참조 호출을 사용할 수 있다.
1. 값 호출
값 호출은 실 매개변수의 값을 형식 매개변수에 복사하여 주는 방법이다.
값을 전달하기 때문에 함수 내에서 값의 변경이 실 매개변수에 영향을 미치지 않는다.
다만 구조체와 같이 비교적 많은 양의 데이터를 포함하고 있는 인수를 전달할 때에는 데이터를 복사하는 양이 많아지고, 메모리 소비량도 많아진다. 또한 때로는 변경된 매개변수의 값을 전달받는 것이 필요한 경우도 있다. 이러한 경우에는 값 호출보다는 참조 호출을 하는 것이 바람직하다.
2. 참조 호출
값 호출과는 달리 참조 호출은 실 매개변수의 주소를 전달한다. 이에 따라 형식 매개변수는 전달되는 실 매개변수의 별명처럼 사용된다. 참조 변수를 선언할 때와 같이 '&'기호를 매개변수에 붙여서 사용한다.
void example(int &x,int &y); //원형
참조 변수는 포인터와 같이 다른 대상을 참조하는 것이므로 자료형이 일치해야 한다.
만약 참조 호출을 했다고 해도 실 매개변수의 값을 보호하고 싶을 때에는 해당 형식 매개변수를 const로 지정하면 된다.
보통 이런 경우는 데이터의 크기가 큰 인수를 전달할 때 유용하다.
const를 사용할 때 주의할 점은 const로 선언된 변수가 const로 선언되지 않은 형식 매개변수로 사용될 수 없다는 것이고 그 역은 성립한다.
함수의 다중 정의
다중 정의란 동일한 이름에 대하여 여러 가지 의미를 부여하는 것이다. 즉 자바에서 함수의 오버로드와 같다.
댓글