cpp4

2023. 11. 2. 14:09개발하는중/cpp

728x90
반응형

함수의 정의와 호출

함수란?

특정 작업을 수행하는 프로그램 문장들을 하나의 단위로 모아 놓고 이름을 부여한 것

함수에 정의된 처리가 필요한 부분에서 호출하여 사용함

-매개변수를 통해 함수에서 처리할 데이터(인수)를 전달

-호출된 함수로 이동하여 몸체 블록을 실행

-정해진 처리를 한 후 결과를 반환

-함수릐 실행을 완료하면 호출한 곳으로 복귀

app 프로그램은 함수를 기본 단위로 하여 구성

returnType functionName(Parameters)

{

   Type1 localName; 내부 변수 선언

 

   statement1; // 로직 수행

 

   return returnExpression; // 결과 값 반환

}

 

return 

함수를 마치고 함수를 호출 한 곳으로 복귀하는 명령

함수 안의 어느 곳이든 복귀를 위해 사용 가능

return 타입은 함수 에 선언한 returnType과 동일 해야함

return 이 없는 경우 void로 선언

 

함수 호출 형식

functionName(parameters); // return 값이 없는 void형태에 많이 사용 아니여도 사용한다.

변수이름 = functionName(parameters); return 값을 바로 담아서 사용

 

main 밑에 함수 가 있는 경우 컴파일 도중 함수가 밑에 선언되어 있어 에러 남, 미리 함수의 원형을 선언 해주면 가능

함수의 원형은 바디부분 뺴고 머리부분만 선언 해주면됨

 

함수의 순환 호출

순환 호출(recursive call)

함수를 정의하는 몸체블록 안에서 직접또는 간접적으로 그 함수를 호출하도록 코드를 작성하는 것

 

함수 장점

크고 복잠한 프로그램을 작은 크기의 의미 있는 작업 단위로 분할하여 구성 -> 간결하고 이해하기 쉬운 프로그램을 만들 수 있음

반복 사용되는 코드의 중복 방지

잘 설계된 함수는 다른 응용에서 재사용할 수 있음

함수 단점

함수 호출과 복귀과정에서 처리 시간이 추가됨

매우 효울적으로 동작해야 하는 함수라면 inline함수로 선언

 

인수의 전달

argument(인수) 

함수의 호출 문장에서 전달하는 식(expression)

여러 개의 인수가 있을 경우 , 로 구분하여 나열

 

전달방식

call-by-value(값 호출) = 실 매개 변수의 값을 형식 매개변수에 복사하는 방식

장점? 실매개변수와 형식 매개 변수는 별개의 데이터이므로 불필요한 부작용이 발생하지 않음

단점? 구조체와 같이 많은 양의 데이터로 구성된 인수를 전달할 경우 데이터의 복사량이 많아짐

 

call-by-reference(참조 호출) = 실 매개변수의 참조를 형식 매개변수에 전달하는 방식 

용도 

함수에서 처리한 결과를 매개변수를 통해 받아오려는 경우

많은 양의 데이터로 구성되는 구조체나 객체와 같은 인수를 함수레 효율적으로 전달하는 경우

 

참조 호출을 통한 효율적인 인수 전달

많은 양의 데이터로 구성되는 구조체나 객체를 인수로 전달하는 경우 값 호출을 사용하는 것에 비해 참조 호출을 사용하는 것이 효율적임

함수 호출의 효율성을 위해 참조 호출을 하지만 실 매개변수의 값이 변경되는 것을 원하지 않는 경우 형식 매개변수에 const 선언하여 실 매개 변수를 보호 

 

디폴트 인수

인수의 디폴트 값을 지정하는 방법

일반적으로 사용되는 디플트 값이 있는 인수의 경우 함수를 정의할 때 그값을 미리 지정할 수 있음

디폴트 인수는 인수 중 끝에만 위치 할 수 있음

 

함수의 다중정의 ..자바의 오버로딩 개념?

다중정의란 ? 동일한 이름에 대하여 여러가지 의미를 부여 하는 것

함수 다중정의

동일한 이름을 갖는 함수를 여러 개 정의 하는 것

동일한 개념의 처리를 여러가지 데티어나 객체에 대해 각각의 대상에 맞는 처리를 할 경우 사용함

다중정의된 함수의 구분 : 인수의 개수 자료형

!함수의 반환 자료형으로 함수를 구분할 수 없음

 

inline 함수?

함수 호출 절차를 따르지 않고 함수 호출 위치에 함소의 처리 문장이 삽입되게 번역하도록 선언된 함수

함수를 사용함으로써 얻을 수 있는 모듈화의 장점을 살리면서, 함수 호출에 따른 부수적인 처리시간이 생략됨

함수 호출 루틴으로부터 함수로 넘어가는 부분의 코드 최적화가 가능

-매우 빈번이 호출되며 빠른 실행이 요구되는 함수를 inline함수로 선언하면 성능을 높이는데 도움이됨

 

주의

inline함수로 선언하더라도 반드시 inline으로 번역되는 것은 아니다.

inline선언을 무시하고 일반 함수로 번역하는 경우

-함수가 너무 큰경우, 순환호출(recursive call)하는 경우, 프로그램 내에서 그 함수에 대한 포인터를 사용하는 경우

 

 

 

  1. 순환 호출(recursive call)
    함수에서 직접 또는 간접적으로 그 함수를 호출하는 것
  2. 인수(argument)
    함수 호출 문장에서 함수에 전달하기 위해 나열된 식
  3. 실 매개변수(actual parameter)
    함수 호출 문장에서 함수의 형식 매개변수에 전달할 인수
  4. 형식 매개변수(formal parameter)
    인수를 전달받기 위해 함수에 선언된 매개변수
  5. 값 호출(call-by-value)
    실 매개변수의 값을 형식 매개변수에 복사하는 매개변수 전달 방식
  6. 참조 호출(call-by-reference)
    실 매개변수의 참조를 형식 매개변수에 전달하는 매개변수 전달 방식
  7. 함수 다중정의
    동일한 이름을 갖는 함수를 여러 개 정의하는 것
  1. 함수는 특정 작업을 수행하는 프로그램 문장들을 하나의 단위로 모아 놓고 이름을 부여한 것으로 함수에 정의된 처리가 필요한 부분에서 호출하여 사용할 수 있다.
  2. 함수를 호출할 때 함수의 처리에 사용할 인수를 매개변수를 통해 전달한다.
  3. C++에서는 실 매개변수의 값을 형식 매개변수에 복사하는 값 호출 방식과 실 매개변수의 참조를 형식 매개변수에 전달하는 참조 호출 방식으로 인수를 함수에 전달할 수 있다.
  4. 많은 양의 데이터로 구성되는 구조체나 객체를 인수로 전달하는 경우 값 호출을 사용하는 것에 비해 참조 호출을 사용하는 것이 효율적이다.
  5. 일반적으로 사용되는 디폴트 값이 있는 인수는 디폴트 인수로 지정할 수 있다.
  6. 동일한 개념이지만 처리 대상에 맞게 동작하는 여러 개의 함수를 만들 때 이들을 같은 이름의 함수로 다중정의할 수 있다.
  7. 매우 빈번히 호출되며 빠른 실행이 요구되는 함수를 inline 함수로 선언하면 성능을 높이는 데 도움이 된다.
728x90

'개발하는중 > cpp' 카테고리의 다른 글

cpp6  (0) 2023.11.04
cpp5  (0) 2023.11.04
cpp3  (1) 2023.10.21
cpp2  (0) 2023.09.25
cpp  (0) 2023.09.25