728x90
C++
Call by Value
- 함수 호출 시 인자의 값 자체를 복사하여 함수에 전달하는 방식이다.
- 함수는 원본 데이터의 복사본을 사용하므로, 함수 내부에서 데이터가 변경되더라도 원본 데이터에는 영향을 미치지 않는다.
Call by Reference
- 함수 호출 시 인자의 참조를 전달하는 방식이다.
- 함수는 원본 데이터의 주소를 참조하므로, 함수 내부에서 변경된 내용이 원본 데이터에 반영된다.
언제 Call by Value 와 Call by Reference를 사용해야 할까?
- Call by Value
- 원본 데이터 보호가 중요한 경우 사용한다. 함수 내부에서 인자를 수정하더라도 원본 데이터에 영향을 주기 않아야 할 때 적합하다.
- 데이터의 읽기 전용 연산이나 원본 데이터 변경을 원하지 않는 경우 사용된다.
- Call by Reference
- 원본 데이터 수정이 필요한 경우 사용한다. 함수 내부에서 인자의 값을 변경해야 하거나, 함수에서 여러 값을 반환해야 할 때 적합하다.
- 특정 값을 함수 내에서 변경하고 이를 반영해야 하는 경우 사용된다.
C++의 지역변수 선언
- C언어로 프로그램을 작성하는 경우에는 함수를 정의함에 있어서 지역변수의 선언이 항상 제일 먼저 등장해야만 했다. 그러나 C++의 지역변수 선언은 함수 내 어디든 삽입이 가능하다.
- C언어도 새로운 표준에서는 C++과 마찬가지로 변수선언의 위치에 제한을 두지 않는다. 그러나 아직도 대부분의 컴파일러는 이를 허용하지 않는다. 반면 C++의 모든 컴파일러는 지역변수의 선언 위치에 제한을 두지 않는다.
함수 오버로딩(Function Overloading)
- C언어에서는 다음과 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다. 두 함수의 이름이 같기 때문에 컴파일 오류가 발생한다.
- C++에서는 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하기 때문에 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의를 허용할 수 있다. 이러한 형태의 함수정의를 가리켜 함수 오버로딩이라고 한다.
- C++의 경우 호출할 함수를 찾을 때, 함수의 이름과 매개변수의 선언 이 두가지 정보를 활용하고, C언어의 경우 함수의 이름만 이용해서 호출대상을 찾는다. 때문에 C언어에서는 함수의 오버로딩이 불가능하며, 이를 문법적으로 허용하지 않는다.
- 함수의 오버로딩이 가능 하려면 매개변수의 선언이 달라야 한다. 매개변수의 자료형 또는 개수가 달라야 한다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.11.25 CS, C++ (0) | 2024.11.25 |
---|---|
24.11.24 C++ (0) | 2024.11.24 |
24.11.22 JavaScript, C++ (0) | 2024.11.22 |
24.11.21 Node.js, Unity (0) | 2024.11.21 |
24.11.20 CS (0) | 2024.11.20 |