본문 바로가기
Java/Basic

기본형 매개변수, 참조형 매개변수

by 최로이 2021. 3. 19.

자바에서는 메소드를 호출할 때 매개변수로 지정한 값을 메소드의 매개변수에 복사해 넘겨준다. 매개변수의 타입이 기본형일 땐 값이 복사되지만, 참조형을 땐 인스턴스의 주소가 복사된다.

 

기본형 매개변수: 변수의 값을 읽기만 가능

참조형 매개변수: 변수의 값을 읽고 변경 가능

 

기본형 매개변수 예제)

class Data { int x; }

class PrimitiveParamEx {
	public static void main(String[] args) {
		Data d = new Data();
		d.x = 10;
		System.out.println("main() : x = " + d.x);

		change(d.x);
		System.out.println("After change(d.x)");
		System.out.println("main() : x = " + d.x);
	}

	static void change(int x) {  // 기본형 매개변수
		x = 1000;
		System.out.println("change() : x = " + x);
	}
}

--------------------------------
main() : x = 10
change() : x = 1000
After change(d.x)
main() : x = 10

코드를 보면 기본형은 값만 가져오기 때문에 같은 참조변수라도 매개변수의 값에 따라 다른 값이 저장된다.

 

기본형 매개변수 데이터

① change메소드가 호출되면서 d.x가 change메소드의 매개변수 x에 복사

② change메소드에서 x의 값을 1000으로 변경

③ change메소드가 종료되면서 매개변수 x는 스택에서 제거

 

 

참조형 매개변수 예제)

class Data { int x; }

class ReferenceParamEx {
	public static void main(String[] args) {

		Data d = new Data();
		d.x = 10;
		System.out.println("main() : x = " + d.x);

		change(d);
		System.out.println("After change(d)");
		System.out.println("main() : x = " + d.x);

	}

	static void change(Data d) { // 참조형 매개변수
		d.x = 1000;
		System.out.println("change() : x = " + d.x);
	}
}

-------------------------------------
main() : x = 10
change() : x = 1000
After change(d)
main() : x = 1000

기본형 매개변수와는 다르게 참조형은 주소를 가져오기 때문에 같은 주소값을 가지고 있는 참조변수가 change 메소드의 매개 변수의 주소를 참조했을 때 함께 값이 변경됐다.

 

참조형 매개변수 데이터

① change 메소드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사. 이제 매개변수 d에 저장된 주소값으로 x에 접근 가능

② change메소드에서 매개변수 d로 x의 값을 1000으로 변경

③ change 메소드가 종료되면서 매개변수 d는 스택에서 제거

'Java > Basic' 카테고리의 다른 글

생성자(Constructor)  (0) 2021.03.23
클래스 메소드와 인스턴스 메소드  (1) 2021.03.19
JVM의 메모리 구조  (0) 2021.03.19
객체지향  (0) 2021.03.03
2차원 배열, Arrays클래스  (0) 2021.02.25

댓글