본문 바로가기
study/Java

기본형/참조형 매개변수

by 고기만두(개발자) 2021. 8. 22. 15:17
728x90
반응형

메서드의 매개변수 타입이 기본형(우리가 흔히 알고있는 int, String 이런 것들)이라면, 변수의 값을 읽어 오기(read-only)만 할 수 있습니다.

메서드를 호출할 때 매개변수로 지정한 값 자체를 복사해오기 때문입니다.

하지만 참조형인 경우, 변수의 값을 읽기도 가능하지만 변경도 가능(read & write)합니다.

메서드를 호출할 때 인스턴스 주소가 복사되기 때문입니다.

 

예제 두 개를 통해서 알아보도록 하겠습니다.

class Data{
    int x;
}

public class Parameter {

	public static void main(String[] args) {
		 Data d = new Data();
         d.x = 10;
         
         System.out.println("main:x="+ d.x);
         System.out.println();
         change (d.x);
         System.out.println("change(d.x) 이후 :" + d.x);
         System.out.println();
         change2(d);
         System.out.println("change2(d) 이후 :" + d.x);
         
	}
	private static void change(int x) {
	   x=1000;
	   System.out.println("change x=" +x);
	   
	}// d.x가 아닌 change메서드의 매개변수 x(지역변수)의 값이 변경
	private static void change2(Data d) {
	    d.x =1000;
	    System.out.println("change2 d.d="+ d.x);
	}// change2메서드의 매개변수가 참조형- 값이 아니라 값이 저장된 주소를 change메서드에 넘겨주었기 때문에 값 읽기, 변경 가능

}

Change 메서드의 매개변수는 int x 로 기본형입니다.

x값을 바꾸어 주어도, 인스턴스 d x값이 바뀌지 않았습니다.

하지만 change2 메서드의 경우 참조형 매개변수를 사용했습니다.

인스턴스 dx값을 바꾸어 줄 수 있었고, x의 값이 자연스럽게 바뀔 수 있었습니다.

 

인스턴스 대신 크기가 1인 배열 x[]을 활용하도록 변경한 내용이 아래 예제입니다.

배열도 객체처럼 참조변수를 통해 데이터가 저장된 공간에 접근합니다.

그래서 간단한 데이터를 임시로 처리할 때는 인스턴스 객체 생성 없이 배열로 간단하게 접근할 수도 있습니다.

package study;

public class Test {

	public static void main(String[] args) {
		int[] x = {10};//크기가 1인 배열.x[0] =10;
		  System.out.println("main() : x = " + x[0]);
		  
		  change(x);
		  System.out.println("After change(x)");
		  System.out.println("main() : x = " + x[0]);
		  
		 }
		 
		 static void change(int[] x){//참조형 매개변수
		  x[0] = 1000;
		  System.out.println("change() : x = " + x[0]);
	}

}

두 개의 예제를 통해 기본형 매개변수와 참조형 매개변수의 차이점을 알아볼 수 있었습니다.

728x90
반응형

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

Linkedlist에 대해 알아보자  (0) 2021.08.24
컬렉션 프레임워크: Arraylist  (0) 2021.08.23
JVM의 메모리 구조  (0) 2021.08.21
자바 Java 메서드 (3) – 메서드의 호출  (0) 2021.08.20
자바Java 메서드 (2) – return  (0) 2021.08.19

댓글