반응형
PrimitiveParam
기본형 매개변수
&
ReferenceParam
참조형 매개변수
기본형 매개변수 - read only
참조형 매개변수 - read & write
class Data {String x;}
public class PrimitiveParamReferenceParam {
public static void main(String[] args) {
Data d = new Data();
d.x = "main입니다";
System.out.println("main : " + d.x);
primitiveParam(d.x);
System.out.println(d.x);
referenceParam(d);
System.out.println(d.x);
Data d2 = new Data();
System.out.println("d2.x : " + d2.x);
}
static void primitiveParam(String x) {
x = "기본형 매개변수입니다";
}
static void referenceParam(Data d) {
d.x = "참조형 매개변수입니다";
}
}
두 함수에서 Data class의 x 변수를 새로운 값을 대입 후
main에서 출력했을 때 참조형 매개변수만 바뀐 값을 출력했습니다.
※ main에서 Data class를 호출한 인스턴스 : (Data d = new Data();)
이유는 main에 생성된 인스턴스의 주소값을
매개변수로 넘겼느냐 아니냐의 차이입니다
먼저 변수명이 가진 주소값은 stack memory에 저장되어
실제 변수에 =대입되는 값은 heap memory에 저장된 상태로 연결되어
주소값을 통해 값을 호출한다는 점을 기억하시길 바라며..
primitiveParam()을 호출할 때 매개변수는 인스턴스 속 변수 (d.x) 만을 넘겼습니다.
따라서 primitiveParam()함수에서 생긴 일이 main에는 영향을 미치지 못합니다.
하지만 참조형 매개변수로 인스턴스명 (d) 를 넘겼습니다.
그러면 referenceParam()에서는 주소값에 연결된 값을 새로 대입할 수 있게됩니다.
d 출력 밑에 Data d2 = new Data();
를 출력했을 때 null인 걸 보면 알 수 있듯이
실제 class Data{}를 변경하는 게 아니라
main()함수 속 new로 생성된 instacne에 이용한다는 겁니다
기본형 매개변수를 쓴 primitiveParam()는 인스턴스가 아닌, 그 속의 값만을 넘겼고
인스턴스의 주소를 사용하는 참조형 매개변수는 referenceParam()에서
인스턴스 d가 가진 주소값을 이용해 새로 대입할 수 있었단 겁니다.
참조
https://youtu.be/6K_7XKJds7k?si=eJc_Fp40h5IB-OK
https://youtu.be/c9rXj3b9rKI?si=c_XOYa0CzB2f-p9_
반응형
'☕ 자바 JAVA > ☕ 변수와 자료형 Variables & Data Type' 카테고리의 다른 글
[JAVA]배열 Array [ ] (0) | 2024.08.22 |
---|---|
[JAVA]변수의 초기화 (1) | 2024.03.12 |
[JAVA]class 객체배열을 만들 때 주의할 점 (0) | 2023.08.19 |
[JAVA]인수(=인자) Argument와 매개변수 Parameter (0) | 2023.01.09 |
[JAVA]선언위치와 static유무로 구분한 변수종류 (0) | 2023.01.08 |