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 메서드의 경우 참조형 매개변수를 사용했습니다.
인스턴스 d의 x값을 바꾸어 줄 수 있었고, 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 |
댓글