Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- select_type
- java
- redis
- 인덱스
- lambda
- DDL
- 테스트 코드
- SQL
- KEVISS
- 바이너리 카운팅
- DI
- equals
- StringBuilder
- Spring
- stream
- static
- MSA
- 재정의
- AOP
- cache
- VUE
- docker
- hashcode
- Test
- 생성자 주입
- 필드 주입
- 조합
- jwt
- 열 속성
- jpa
Archives
- Today
- Total
백엔드 개발자 블로그
Call by Value & Call by Reference 본문
Java의 참조형 변수는 Call by Reference인 줄 알았는데, Java는 Call by Value만 지원한다고 한다. 자세히 알아보자.
https://www.youtube.com/watch?v=kCiNYzHuIX8&ab_channel=Log2Base2
Call by Value
- 함수를 호출할 때 인수의 값을 복사하여 전달한다.
- 함수 내에서 값을 변경하는 경우 복사된 값이 변경되는 것이니, 실제 값은 변경되지 않는다.
Class CallByValue {
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("swap() 호출 전 : a = " + a + ", b = " + b);
swap(a, b);
System.out.println("swap() 호출 후 : a = " + a + ", b = " + b);
}
}
// 결과값
// swap() 호출 전 : a = 10, b = 20
// swap() 호출 후 : a = 10, b = 20
Call by Reference
- 메서드 호출 시 인수의 참조를 전달한다.
- 호출된 메서드 내에서 원래 변수의 값을 직접 변경할 수 있다.
Java의 참조변수는 Call by Reference?
결론만 말하면 아니다.
- 함수 내에서 Wrapper Class의 멤버 변수를 변경하면 변경이 된다.
- 이 때문에 참조변수는 Call by Value라고 착각한다.
- 이는 단지 참조값(객체의 메모리 주소)를 알고 있기 때문에 가능한 것 뿐이다.
- 참조 자체를 변경해도 원래의 참조에는 영향을 미치지 않는다.
- 참조(Call By Reference)를 전달했으면 바뀌었다.
- 하지만, 참조값(Call By Value)을 전달했기에 바뀌지 않았다.
public class Example {
public static void main(String[] args) {
MyObject obj = new MyObject();
obj.value = 5;
changeObject(obj);
System.out.println(obj.value); // 출력: 10
resetObject(obj);
System.out.println(obj.value); // 출력: 10, 원래 객체는 그대로
}
public static void changeObject(MyObject obj) {
obj.value = 10; // 객체의 속성 변경
}
public static void resetObject(MyObject obj) {
obj = new MyObject(); // 새로운 객체를 참조하도록 변경
obj.value = 0;
}
}
class MyObject {
int value;
}
참고
'Java' 카테고리의 다른 글
Scanner vs BufferedReader (0) | 2024.05.19 |
---|---|
Generic (0) | 2024.05.16 |
Garbage Collector (0) | 2024.05.13 |
Exception (0) | 2024.05.13 |
람다와 클로저 (0) | 2024.05.11 |