📌 Call by Value란?
**Call by Value(값에 의한 호출)**은 함수 호출 시, 인자로 전달된 값을 복사하여 함수 내부에서 사용하는 방식이야.
➡️ 즉, 함수가 인자로 받은 변수의 복사본을 사용하므로, 함수 내부에서 변경해도 원래 변수에는 영향을 주지 않아!
✅ Call by Value 특징
✔ 값이 복사됨 → 원본 데이터가 변경되지 않음
✔ 독립적인 메모리 공간 사용 → 함수 내 변수는 원본과 별개
✔ **기본 데이터 타입(Primitive Type)**에서 주로 사용됨 (예: int, float, char 등)
📌 Call by Value 예제 (Java)
💡 값을 복사해서 전달하기 때문에 원래 변수에는 영향이 없음!
class Example {
static void modifyValue(int num) {
num = 10; // 여기서 변경해도 원본 변수에는 영향 없음
System.out.println("함수 내부 num: " + num);
}
public static void main(String[] args) {
int num = 5;
modifyValue(num);
System.out.println("함수 호출 후 num: " + num); // 원본 값 그대로 5
}
}
✅ 실행 결과
함수 내부 num: 10
함수 호출 후 num: 5 // 원본 값 유지됨
📌 함수 내부에서 num을 10으로 바꿨지만, 원래 변수(num = 5)는 그대로 남아있음!
📌 Call by Value vs. Call by Reference 차이점
구분 Call by Value (값에 의한 호출) Call by Reference (참조에 의한 호출)
데이터 전달 방식 값 자체를 복사하여 전달 변수의 참조(주소)를 전달
원본 데이터 변경 여부 변경되지 않음 변경됨
사용되는 데이터 타입 기본형 데이터 (int, float 등) 객체, 배열, 리스트 등
메모리 할당 새로운 메모리 공간 할당 같은 메모리를 참조
📌 Call by Reference 예제 (Java)
💡 객체는 참조(reference)로 전달되므로 함수 내부에서 변경하면 원본도 바뀜!
class Example {
static void modifyArray(int[] arr) {
arr[0] = 10; // 원본 배열이 변경됨
}
public static void main(String[] args) {
int[] arr = {5, 6, 7};
modifyArray(arr);
System.out.println("함수 호출 후 arr[0]: " + arr[0]); // 10으로 변경됨
}
}
✅ 실행 결과
함수 호출 후 arr[0]: 10 // 원본 배열 변경됨
📌 배열은 참조형 데이터이므로 함수 내부에서 변경하면 원본도 바뀜!
📌 결론
✔ Call by Value → 값이 복사됨, 원본 데이터 변경 X (기본 데이터 타입)
✔ Call by Reference → 참조가 전달됨, 원본 데이터 변경 O (객체, 배열 등)
이제 차이 확실히 알겠지? 😊 더 궁금한 거 있으면 질문해 줘! 🚀🔥
'개발공부 > CS' 카테고리의 다른 글
파라미터(Parameter)와 아규먼트(Argument)의 차이점 (0) | 2025.02.16 |
---|---|
Call by Reference (0) | 2025.02.16 |
Git과 GitHub 차이점 (0) | 2025.02.16 |
추상화란? (0) | 2025.02.16 |
오버로딩(Overloading) vs. 오버라이딩(Overriding) 차이점 (0) | 2025.02.16 |