참조타입 매개변수
이번에는 참조타입의 매개변수가 어떻게 동작하는지 알아보도록 하겠습니다.
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);
System.out.println("인스턴스 a의 값은? " + n.a);
}
static void changeNumber(Number n) {
n.a = 100;
System.out.println("변경된 인스턴스 a의 값은? " + n.a);
}
}
|
cs |
들어가기에 앞서 이전 글과 반복되는 과정들에 대한 그림은 생략하도록 하겠습니다! 번거로우시겠지만 중복되는 과정의 그림들은
이전 글(https://developer-vanilla.tistory.com/13)의 그림과 함께 봐주시면 감사하겠습니다! ㅠㅠ


(13행) 이번에는 참조변수 n을 매개변수로써 사용하게 되는데, 참조변수는 주소값을 저장하고 있다고 하였죠? 따라서 참조변수 n을
매개변수로 넘겨준다는 것은 Number 인스턴스의 주소값을 매개변수로써 넘겨준다는 의미가 됩니다!

(18행) 이제 changeNumber 메서드 내 지역변수는 참조변수 n이 되었습니다! 쉽게 보자면 복사같은 개념이라고도 볼 수도 있습니다.

(19행) Number 인스턴스라는 이제 서로 같은 주소값을 가리키게 되므로 changeNumber 메서드 내 지역변수 값을 100으로 바꾸었
다는 것은 곧 main 메서드 내의 참조변수 n이 가리키는 인스턴스 멤버변수 a의 값도 100이 되는 너무나도 당연한 결과가 나옵니다!
따라서 changeNumber 메서드 종료 후 main 메서드 내의 14행 println 메서드가 실행되면 똑같은 100이라는 값이 출력됩니다.
참조타입 매개변수 특징
이번에는 기본타입 매개변수가 아닌, 참조타입으로 매개변수를 받아보았습니다. 이 참조타입 매개변수로 받게 되었을 때의 특징은
변수의 값을 읽고 쓸 수 있다는 것입니다. 참조타입 매개변수로써 주소값을 읽어 들이고 인스턴스의 멤버변수 a를 변경할 수 있기 때문
입니다! 기본타입으로 매개변수를 사용했을 때와 참조타입으로 매개변수를 사용했을 때의 차이점이 이해가 되셨으면 좋겠습니다.
+ JVM 메모리 구조 즉, 메모리 영역과 힙 그리고 호출스택에 올라가는 과정을 코드를 보시면서 단계별로 직접 연습해보시면서 이해하시
면 도움이 되실 거라 생각합니다!
'java > 객체지향' 카테고리의 다른 글
8. 오버로딩(overloading) (0) | 2023.01.15 |
---|---|
7. 스태틱 메서드(Static Method), 인스턴스 메서드(Instance Method) (1) | 2023.01.15 |
6-1. 기본타입 매개변수 (2) | 2023.01.14 |
6. JVM 메모리 구조 이해 (0) | 2023.01.13 |
5-1. (보충)메서드 return문 (0) | 2023.01.13 |