기본형과 참조형 메서드 호출
메서드를 호출할 때 사용하는 매개변수(파라미터)도 결국 변수일뿐입니다. 따라서 메서드를 호출할 때 매개변수에 값을 전달하는 것도 앞서 설명한 내용과 같이 값을 복사해서 전달하게 됩니다.
다음 메서드 호출 코드를 보고 어떤 결과가 나올지 먼저 생각해보세요.
기본형과 메서드 호출의 예시
위에 서와 같이 출력값은 전,후 20이 출력이 됩니다.
결과를 분석해보면 changePrimitive(int x)가 발동되면서 x에는 30이 되지만 a 값은 20으로 유지가 됩니다.
그렇기 때문에 a는 그대로 20이 출력되고 x에는 값이 30이 되므로 메서드 a의 값은 전, 후 그대로 20이 출력이 됩니다.
참조형과 메서드 호출의 예시
Data 인스턴스를 생성하고, 참조값을 dataA 변수에 담고 value에 숫자 10을 할당합니다.
메서드를 호출할 때 매개변수 dataX에 변수 dataA의 값을 전달합니다. 이코드는 아래와 같이 해석할 수 있습니다.
Data dataX = dataA
자바에서 변수에 값을 대입하는 것은 항상 값을 복사해서 대입합니다. 변수 dataA는 참조값 Data라는 참조값을 가지고 있으므로 참조값을 복사해서 전달됩니다. 따라서 dataA와 dataX 둘 다 같은 참조값인 Data의 주소를 가지게 됩니다.
그러므로 같은 주소에 datax.value =20;이라는 값을 넣었기때문에 메서드 호출 후는 10이 아닌 20이 출력되게 됩니다.
기본형과 참조형의 메서드 호출
자바에서 메서드의 매개변수(파라미터)는 항상 값에 의해 전달됩니다. 그러나 이 값이 실제 값이냐, 참조(메모리 주소) 값이냐에 따라 동작이 달라지게 됩니다.
- 기본형 : 메서드로 기본형 데이터를 전달하면, 해당 값이 복사되어 전달됩니다. 이경우, 메서드 내부에 개개변수(파라미터)의 값을 변경해도, 호출자의 변수 값에는 영향이 없습니다.
- 참조형 : 메서드로 참조형 데이터를 전달하면, 참조값이 복사되어 전달됩니다. 이 경우, 메서드 내부에서 매개변수(파라미터)로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경됩니다.
Java공부에 관련된 포스팅
'IT관련 정보' 카테고리의 다른 글
Java 공부편 - null (0) | 2024.02.23 |
---|---|
변수와 초기화 (0) | 2024.02.22 |
Java 공부편 - 기본형과 참조형(1) (0) | 2024.02.07 |
Java 공부편 - 클래스(2) (0) | 2024.01.17 |
Java 공부편 - 클래스가 필요한 이유(1) (0) | 2024.01.16 |