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
2
3

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
2
3

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);
temp.x=data.x;
return temp;

copy 메서드는 새로운 객체를 생성한 다음에 매개변수로 넘겨받은 객체에 저장된 값을 복사해서 반환한다

반환하는 값이 Data3 객체의 주소이므로 반환 타입이 Data3 인것이다

 

참조

남궁성 선생님 - 자바의 정석 기초편

728x90
반응형