Programming/Java, Spring

[JAVA] 기본형 매개변수와 참조형 매개변수

Juun 2022. 5. 7. 23:16
반응형

기본형 매개변수

변수의 값을 읽기만 할 수 있음(read only)

참조형 매개변수

변수의 값을 읽고 변경 할 수 있음(read & write)

 

아래 예제를 통해서 어떤 차이가 있는지 확인해 볼께요!

 

class Data {int x;}
class ParameterTest{
	public static void main(String[] args)
    
    	Data d = new Data();	//객체 생성
        d.x = 10;
        System.out.println("main() : " + d.x);
        
        change(d.x);
        System.out.println("After change(d.x)";
        System.out.println("main() : x =" + d.x)
	}

static void change(int x) {	// 기본형 매개변수
	x = 1000; //지역변수
    System.out.println("change() : x = " + x);
	}

}

위 예제 결과는 

main() : x = 10

change() : x = 1000

After change(d.x)

main() : x = 10

이 되는데 change 메서드의 지역변수 x에 1000을 저장하고

x의 값이 10에서 1000 으로 변경이 된다.

그래서 change 메서드의 x값은 1000이 된다

  1. change 메서드가 호출되면 d.x가 change 메서드의 매개변수 x에 복사됨
  2. change 메서드에서 x의 값을 1000으로 변경
  3. change 메서드가 종료되면서 매개변수 x는 스택에서 제거됨
class Data {int x;}
class ParameterTest{
	public static void main(String[] args)
    
    	Data d = new Data();	//객체 생성
        d.x = 10;
        System.out.println("main() : " + d.x);
        
        change(d.x);
        System.out.println("After change(d.x)";
        System.out.println("main() : x =" + d.x)
	}

static void change(Data d) {	// 참조형 매개변수
	x = 1000; //지역변수
    System.out.println("change() : x = " + x);
	}

}

위 예제 결과는

main() : x = 10

change() : x = 1000

After change(d.x)

main() : x = 1000

이 되는데 change 메서드를 호출하면 매개변수로 참조변수 d를 넘겨주게 된다

main 메서드의 참조변수 d의 값(Data 인스턴스의 주소)은 change 메서드의 매개변수 d에 저장이 된다

 

  1. change 메서드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사됨, 매개변수 d에 저장된 주소값으로 x에 접근가능
  2. change 매서드에서 매개변수 d로 x의 값을 1000으로 변경
  3. change 메서드가 종료되면서 매개변수 d는 스택에서 제거

 

참고 : 자바의정석(도서)

반응형