☕ 자바 JAVA/☕ 변수와 자료형 Variables & Data Type

[JAVA]기본형 매개변수와 참조형 매개변수

yeun.log 2023. 9. 17. 22:28
반응형

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_ 

 

반응형