티스토리 뷰
💡 C++에서 값에 의한 호출(Call by Value)이란? 완벽 정리
프로그래밍에서 함수는 특정 작업을 수행하도록 코드를 분리할 때 매우 중요한 도구입니다.
C++을 포함한 대부분의 언어에서 함수는 값을 전달받고, 결과를 반환하는 방식으로 동작합니다.
이때 함수에 값을 전달하는 방식에는 여러 가지가 있지만, 그 중 가장 기본적인 방식이 바로
값에 의한 호출(Call by Value)입니다.
이 글에서는 Call by Value란 무엇인지, 어떻게 동작하는지,
그리고 언제 사용하고 언제 피해야 하는지까지 명확하게 설명하겠습니다.
✅ Call by Value란?
Call by Value(값에 의한 호출)이란, 함수를 호출할 때 인자의 값 자체를 복사하여 함수로 전달하는 방식을 말합니다.
즉, 함수 내부에서 사용하는 매개변수는 원본의 복사본이며,
함수 내에서 그 값을 변경해도 원래 값에는 아무런 영향이 없습니다.
📦 기본 동작 순서
- 함수 호출 시, 인자의 값이 복사된다.
- 복사된 값이 함수의 매개변수에 저장된다.
- 함수 내부에서는 복사된 값만 사용한다.
- 함수가 종료되면 복사된 변수는 사라지고, 원본은 그대로 유지된다.
🔍 예제 코드로 이해하기
#include <iostream>
using namespace std;
void changeValue(int x) {
x = 100;
}
int main() {
int a = 10;
changeValue(a);
cout << "a의 값: " << a << endl; // 결과: a의 값: 10
return 0;
}
📌 설명
changeValue(a)호출 시a의 값인10이 복사되어x에 전달됩니다.x = 100을 통해x를 변경해도, 이는 복사본이기 때문에a에는 영향을 주지 않습니다.- 따라서 출력 결과는
"a의 값: 10"입니다.
✅ Call by Value는 언제 사용하는가?
값에 의한 호출은 모든 경우에 적합하지는 않습니다. 하지만 다음과 같은 상황에서는 매우 유용하게 사용할 수 있습니다:
1. 원본 값을 보호해야 할 때
함수에서 전달받은 값을 절대 변경해서는 안 되는 경우가 많습니다.
이럴 때 값에 의한 호출을 사용하면, 실수로라도 원본 데이터를 변경할 위험이 없습니다.
📌 예:
void printUserId(int id) {
cout << "사용자 ID: " << id << endl;
}
2. 작은 데이터 타입을 전달할 때
기본 자료형(int, char, float 등)은 복사 비용이 작기 때문에 값으로 전달해도 성능에 큰 영향을 주지 않습니다.
📌 예:
void add(int a, int b) {
cout << "합: " << a + b << endl;
}
3. 독립적인 연산만 필요할 때
함수 내부의 연산이 외부 변수와 아무 관련이 없고, 결과만 출력하거나 내부 처리만 하는 경우에도 call by value가 적합합니다.
📌 예:
void calculateTax(float income) {
float tax = income * 0.2;
cout << "세금: " << tax << endl;
}
❌ Call by Value를 피해야 하는 경우
값에 의한 호출은 언제나 좋은 선택은 아닙니다. 다음과 같은 상황에서는 사용을 피하는 것이 좋습니다:
1. 큰 객체나 구조체를 전달할 때
값을 복사한다는 것은 메모리에 새로운 공간을 만들어 그 값을 복제하는 것을 의미합니다.
따라서 구조체나 클래스 객체처럼 메모리 크기가 큰 자료형은 복사 비용이 커지고, 성능이 저하될 수 있습니다.
📌 예:
struct BigData {
int arr[10000];
};
void process(BigData d); // ❌ 복사 비용이 큼
이런 경우에는 복사하지 않고 참조(reference)를 사용하는 것이 일반적입니다.
(Call by Reference는 이 글에서 제외합니다.)
2. 원본 값을 함수 내부에서 바꿔야 할 때
값에 의한 호출은 복사본을 다루기 때문에,
함수 내부에서 값을 바꿔도 원래 값에는 영향을 줄 수 없습니다.
즉, 값을 바꾸려면 다른 방법을 써야 합니다.
📌 예:
void resetScore(int score) {
score = 0;
}
// main 함수에서 score는 그대로 남음
📊 요약 비교: Call by Value 특징
💬 마무리 정리
Call by Value(값에 의한 호출)은 C++에서 가장 기본적이고 직관적인 함수 호출 방식입니다.
함수 호출 시 값이 복사되기 때문에, 원본 값은 항상 보호되며
독립적인 계산이나 단순 출력 함수 등에서 매우 유용하게 사용됩니다.
하지만 큰 객체를 복사하거나 원본 값을 직접 변경해야 하는 상황에서는 적절하지 않을 수 있으며,
이럴 경우 다른 방식(Call by Reference 등)을 고려해야 합니다.
함수 호출 방식은 단순히 문법의 문제가 아니라, 성능, 안정성, 버그 예방에 영향을 주는 중요한 개념입니다.
값에 의한 호출은 반드시 정확히 이해하고, 상황에 따라 적절하게 선택해야 합니다.
'홍정모 따라 배우는 C++ > C++ 함수' 카테고리의 다른 글
| 함수 인자 전달 방법2: 참조자(reference)에 의한 인수 전달 (C++) (1) | 2025.06.11 |
|---|---|
| 매개변수(parameter)와 인자(argument)의 차이 완벽 정리(C++) (0) | 2025.06.10 |
- Total
- Today
- Yesterday
- 파이썬
- 코딩테스트
- DP
- 문제풀이
- 알고리즘 문제풀이
- 코딩
- 그리디알고리즘
- 파이썬코딩
- C++
- 알고리즘문제풀이
- 문제 풀이
- 동적계획법
- HTML
- 백준
- c언어
- 문자열처리
- python 알고리즘
- 상속
- 프로그래머스
- dfs
- 그리디
- 브루트포스
- 알고리즘
- 그래프 탐색
- 객체지향
- Python
- 동적 계획법
- 프로그래밍
- 알고리즘기초
- 코딩 테스트
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |