이제 기본타입 매개변수와 참조타입 매개변수의 동작에 대해서 알아보겠습니다. 단순 글을 읽는 것 만으로는 이해하는데 어려움이 느껴지

 

실 수 있지만 각 행마다 JVM 메모리 구조에서 어떻게 동작하는지 단계별로 그림을 통해 이해하고 그림을 여러번 따라해 보시면 금방 익숙

 

해지실 것이라고 생각합니다!


기본타입 매개변수


 

이번에는 기본타입 매개변수가 어떻게 동작하는지 알아보도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Number {
    int a;
}
 
public class CallStack {
 
    public static void main(String[] args) {
        
        Number n = new Number();
        n.a = 5;
        System.out.println(n.a);
        
        changeNumber(n.a);
        System.out.println("인스턴스 a의 값은? " + n.a);
 
    }
    
    static void changeNumber(int a) {
        a = 100;
        System.out.println("변경된 인스턴스 a의 값은? " + a);
    }
 
}
cs

 

지난 글에서 다룬 5행과 7행에 대한 부분은 생략하도록 하겠습니다!

 

 

마찬가지로 9행부터 10행에 대한 부분은 생략하겠습니다!

 

 

11행 또한 생략합니다!

 

 

 

(13행) changeNumber 메서드를 호출하였고 매개변수로써 참조변수 n이 가리키는 인스턴스의 멤버 변수 a의 값을 넘겨줍니다.

 

(18행) main 메서드가 대기 상태가 되고 changeNumber 메서드가 호출스택에 담기면서 실행됩니다. 따라서, main 메서드 내의 14행으로 

 

넘어가는 것이 아닌 18행 이후의 changeNumber 메서드의 다음 명령문들이 실행된다는 것 이해하실 수 있으실겁니다.

 

 

(19행) 호출스택의 changeNumber 메서드 내 지역변수 a의 값을 다시 보시면 100으로 바뀌었음을 알 수 있습니다.

 

 

(20행) 지역변수 a에 100을 대입하면서 변경된 100을 출력하게 되고 호출스택에는 println 메서드가 호출되면서 담기게 됩니다.

 

이후 과정은 println 메서드의 종료 - changeNumber 메서드의 종료 - main 메서드 실행 - 14행 println 메서드 실행 후 종료 - main 메서

 

드 종료입니다. 이 과정이 호출스택에 담기고 버려지는 과정과 같기 때문에 이후 그림은 생략하도록 하겠습니다! 

 


기본타입 매개변수의 특징

 


우리는 앞서 참조변수 n을 통해 인스턴스 멤버변수 a를 매개변수로 사용하였고, changeNumber 메서드에서는 int a 즉, 기본타입으로써

 

매개변수를 받았습니다. 이 기본타입 매개변수로 받게 되었을 때의 특징은 변수의 값을 읽어들일 수만 있다는 것입니다.

 

참조변수 n을 통해 인스턴스 변수 a를 읽어 들이기만 했을뿐, changeNumber 메서드 내의 자체 지역변수 a를 사용하는 것이므로 인스턴스

 

변수 a의 값에는 변동이 없다는 점에 유의하셔야 합니다! (위 그림 호출스택에서 changeNumber 메서드의 지역변수 a를 다시 한번 더

 

살펴보세요!) 너무나 당연하다고 생각드실 수 있겠지만, 다음 글에서 다룰 참조타입 매개변수의 특징에서 그 차이를 아실 수 있을 겁니다!

+ Recent posts