Java
기본형 매개변수, 참조형 매개변수, 참조형 반환타입
스파이더웹
2022. 7. 21. 19:36
728x90
반응형
기본형 매개변수 - 변수의 값을 읽기만 할 수 있다(read only)
참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다(read & write)
기본형 매개변수
class Data {
int x;
}
public class PrimitiveType {
public static void main(String[] args) {
Data data = new Data();
data.x=10;
System.out.println("main : " + data.x);
change(data.x);
System.out.println("After change");
System.out.println("main : " + data.x);
}
static void change(int x){
x=20;
System.out.println("change : " + x);
}
}
결과
main : 10
change : 20
After change
main : 10
1. change 메서드가 호출되면서 data.x 가 change 메서드의 매개변수 x에 복사됨
2. change 메서드에서 x의 값을 20으로 변경
3. change 메서드가 종료되면서 매개변수 x 는 스택에서 제거
즉, 원본이 아닌 복사본이 변경된것이다. 그러므로 원본에는 영향을 미치지 않는다
728x90
참조형 매개변수
class Data2 {
int x;
}
public class ReferenceType {
public static void main(String[] args) {
Data2 data2 = new Data2();
data2.x=10;
System.out.println("main : " + data2.x);
change(data2);
System.out.println("After change");
System.out.println("main : " + data2.x);
}
static void change(Data2 data2){
data2.x=20;
System.out.println("change : " + data2.x);
}
}
결과
main : 10
change : 20
After change
main : 20
참조형의 경우 값이 복사되어 전달된것이아닌 값이 저장된 주소의 참조값을 전달한다
1. change 메서드가 호출되면서 참조변수 data2의 주소가 매개변수 data2에 복사됨
매개변수 data2에 저장된 주소값으로 x에 접근이 가능
2. change 메서드에서 매개변수 data2로 x의 값을 20으로 변경
3. change 메서드가 종료되면 매개변수 data2는 스택에서 제거됨
참조형 반환타입
class Data3{
int x;
}
public class ReferenceReturnType {
public static void main(String[] args) {
Data3 data3 = new Data3();
data3.x=10;
Data3 copy = copy(data3);
System.out.println("data3.x : " +data3.x);
System.out.println("copy.x : " +copy.x);
}
static Data3 copy(Data3 data3){
Data3 temp = new Data3();
temp.x = data3.x;
return temp;
}
}
결과
data3.x : 10
copy.x : 10
반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 이야기이므로 참조형 타입의 값은 '객체의 주소'이므로 정수값이 반환된다
copy 메서드는 새로운 객체를 생성한 다음에 매개변수로 넘겨받은 객체에 저장된 값을 복사해서 반환한다
반환하는 값이 Data3 객체의 주소이므로 반환 타입이 Data3 인것이다
참조
남궁성 선생님 - 자바의 정석 기초편
728x90
반응형