기본형과 참조형 - 메서드 호출
대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다.
메서드 호출도 마찬가지이다. 메서드 호출에 사용하는 매개변수(파라미터)도 결국 변수이다. 따라서 메서드를 호출할 때 전달되는 매개변수 역시 값을 복사해서 전달한다.
기본형과 메서드 호출
최근에 장바구니를 Webpack(Create React App)기반에서 ESBuild + Rollup(Vite)으로 개편하면서 적지 않은 이슈가 있었습니다. 가장 치명적인 이슈는 사용자가 화면에 진입했을 때 흰 화면이 표시되는 이슈였습니다.
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("메서드 호출 전 : a = " + a);
changePrimitive(a);
System.out.println("메서드 호출 후 : a = " + a);
}
public static void changePrimitive(int x) {
x = 20;
}
}
=> 값을 복사해서 대입했기 때문에 a, x는 각각 숫자 10을 가지고 있다. 이때 메서드 안에서 x=20 으로 값을 변경해주면 x의 값만 20으로 변경되고, a는 10으로 유지된다.
참조형과 메서드 호출
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
System.out.println("메서드 호출 전 : a = " + dataA.value);
changePrimitive(dataA);
System.out.println("메서드 호출 후 : a = " + dataA.value);
}
public static void changePrimitive(Data dataX) {
dataX.value = 20;
}
=> Data 인스턴스 생성 후, 참조값 dataA 변수에 숫자 10을 할당.
메서드를 호출하면 참조값을 복사하여 전달한다. 메서드의 매개변수 dataX는 dataA와 같은 주소를 보고 있으므로 dataX를 수정하면 dataA도 변경된 결과가 출력되는 것.
기본형과 참조형의 메서드 호출
- 기본형: 메서드로 기본형 데이터를 전달하면, 값이 복사되어 전달된다. 이 경우, 메서드 내부에서 파라미터의 값을 변경해도 호출자의 변수 값에는 영향이 없다.
- 참조형: 메서드로 참조형 데이터를 전달하면, 참조값이 복사되어 전달된다. 이 경우, 메서드 내부에서 파라미터로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경된다.
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] 변수와 초기화 (0) | 2024.07.02 |
---|---|
[Java 기본] 기본형과 참조형 - 활용 (0) | 2024.07.02 |
[Java 기본] 기본형과 참조형 (0) | 2024.07.01 |
[Java 기본] 배열 (0) | 2024.07.01 |
[Java 기본] 클래스, 객체, 인스턴스 (0) | 2024.07.01 |