변수의 값을 읽기만 할 수 있다. (read only)
매개변수의 타입이 기본형
일 때는 값 자체가 복사되어 넘어가기 때문에, 매개값으로 지정된 변수의 원본 값이 변경되지 않는다.
class Example {
int value;
}
class Main {
public static void main(String[] args) {
// 선언 및 초기화
Example ex = new Example();
ex.value = 77;
// 초기 값 출력
System.out.println("main() : value = " + ex.value);
// 초기 값 출력 후 값을 바꿔본다
// 객체가 아닌 객체의 필드를 전달했다
change(ex.value);
// 값을 바꾼 직후의 출력 (메서드 바깥)
System.out.println("After change(ex.value)");
System.out.println("main() : value = " + ex.value);
}
/* 값을 바꿔주는 역할을 하는 메서드 */
static void change(int value) {
value = 7000;
// 메서드 내에서 값을 바꾼 직후의 결과 출력
System.out.println("change() : value = " + value);
}
}
아래의 결과를 보면 값이 바뀌지 않은 것을 확인할 수 있다.
main() : value = 77
change() : value = 7000
After change(ex.value)
main() : value = 77
변수의 값을 읽고 변경할 수 있다. (read & write)
매개변수를 참조형으로 선언하면, 값이 저장된 곳의 원본 주소를 알 수 있기 때문에... 값을 읽어 오는 것은 물론이고, 값을 변경하는 것도 가능하다.
메서드의 매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있다. (반환타입이 참조형이라는 것은 반환하는 값의 타입이 “실제값의 주소”
라는 의미)
class Example {
int value;
}
class Main {
public static void main(String[] args) {
// 선언 및 초기화
Example ex = new Example();
ex.value = 77;
// 초기 값 출력
System.out.println("main() : value = " + ex.value);
// 초기 값 출력 후 값을 바꿔본다
// 객체를 매개변수로 전달했다
change(ex);
// 값을 바꾼 직후의 출력 (메서드 바깥)
System.out.println("After change(ex)");
System.out.println("main() : value = " + ex.value);
}
/* 값을 바꿔주는 역할을 하는 메서드 */
static void change(Example ex) {
ex.value = 7000;
System.out.println("change() : value = " + ex.value);
}
}
아래의 결과를 보면 바꾸고자 하는대로 값이 바뀌었음을 확인할 수 있다.
main() : value = 77
change() : value = 7000
After change(ex)
main() : value = 7000
참조형 매개변수의 특징을 이용하면 아래와 같은 결과를 얻을 수 있다. 아래의 두 메서드는 같은 실행결과를 가진다.
int add(int a, int b) {
return a + b;
}
void add(int a, int b, int[] result) {
// 주소값을 가져오는 참조형 매개변수(int[])의 특징 활용
result[0] = a + b;
}