기본형 매개변수와 참조형 매개변수
Java에서는 매서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사해서 넘겨준다. 매개변수의 타입이 기본형일 때는 기본형 값이 복사되겠지만, 참조형이면 인스턴스의 주소가 복사된다.
메서드의 매개변수를 기본형으로 선언하면 단순히 저장된 값만 얻지만, 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능하다.
기본형 매개변수 - 변수의 값을 읽기만 할 수 있다. 참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다. |
static void change(int x){...} - 기본형 매개변수
change 메서드에서 main 메서드로부터 넘겨받은 d.x의 값을 1000으로 변경했는데도 main메서드에서는 d.x의 값이 그대로이다.
- change메서드가 호출되면서 'd.x'가 change메서드의 매개변수 x에 복사된다.
- change메서드에서 x의 값을 1000으로 변경한다.
- change메서드가 종료되면서 매개변수 x는 스택에서 제거괸다.
'd.x'의 값이 변경된 것이 아니라, change메서드의 매개변수 x의 값이 변경된 것이다.즉 원본이 아닌 복사본이 변경된 것이라 원본에는 아무런 영향을 미치지 못한다. 기본형 매개변수는 변수에 저장된 값만 읽을 수 있을 뿐 변경할 수는 없다.
static voind change(Data1 d) {...} - 참조형 매개변수
change메서드를 호출한 후 d.x의 값이 변경되었다.
change메서드의 매개변수가 참조형이라서 값이 아니라 '값이 저장된 주소'를 change메서드에게 넘겨주었기 때문에 값을 읽어오는 것 뿐만 아니라 변경하는 것도 가능하다.
- change 메서드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사된다. 이제 매개변수 d에 저장된 주소 값으로 x에 접근이 가능하다.
- change메서드에서 매개변수 d로 x의 값을 1000으로 변경한다.
- change메서드가 종료되면서 매개변수 d는 스택에서 제거된다.
change메서드의 매개변수를 참조형으로 선언했기 때문에, x의 값이 아닌 주소가 매개변수 d에 복사되었다. 이제 main메서드의 참조변수 d와 change메서드의 참조형 변수 d는 같은 객체를 가리키게 된다. 그래서 매개변수 d로 x의 값을 읽는 것과 변경하는 것이 모두 가능한 것이다.
'Backend > Java' 카테고리의 다른 글
[Java] 인터페이스 상속 실습 문제 (1) | 2024.09.06 |
---|---|
[Java] JVM 메모리 구조 / JVM 수행 과정 (1) | 2024.09.05 |
[Java] Class 변수와 메서드 (0) | 2024.09.02 |
[Java] Class 객체 배열 (0) | 2024.08.30 |
[Java] Class 란 / 인스턴스란 / 인스턴스의 생성과 사용 (0) | 2024.08.29 |