ch6-23 기본형 매개변수
(기본형 매개변수 : 메서드의 매개변수의 타입이 기본형이라는 것)
> 기본형 매개변수 - 변수의 값을 읽기만 할 수 있다.(read only)
> 참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다.(read & write)
* ch6-23,24 : 기본형 매개변수와 참조형 매개변수 중요중요 강의 여러번 보고 제대로 알고 넘어가라!
위의 기본형 매개변수 예제 단계별 과정.
1. 예제 실행 - main 메서드 스택에 올라감 : 프로그램 시작
2. 참조변수 d만들어짐, 객체 생성(Data의 객체 만들어짐. 처음엔 0으로 자동 초기화)
3. 참조변수 d가 가리키는 객체x의 값을 10으로 저장(처음엔 d.x는 0)
4. println -> d가 가리키는 객체x의 값 10 출력
5. change메서드 호출 - d.x의 값이 x로 복사. 따라서 change메서드에 10이 매개변수로 들어감
6. chage메서드가 main메서드 위로 스택에 올라가고 지역변수 x에 10이 대입됨.
7. change메서드 문장 실행 : change메서드의 지역변수 x에 1000이 대입됨.
(main에 있는 d가 가리키는 객체x와 change메서드 안의 지역변수인 x가 이름은 같지만, 다른 저장공간.
이름만 같지 전혀 다른 공간임.)
8. println -> x 값 1000 출력
9. 문장 다 수행했으니까 change메서드 호출한 곳으로 돌아감.
10. 호출스택에서 change메서드 사라지고 지역변수 x도 함께 사라짐
11. 대기하고 있던 main메서드가 실행상태가 되고,
12. println -> After change(d.x) 출력
main메서드 위로 println메서드 호출스택에 올라가고 출력하고(작업수행)사라짐
13. println -> d가 가리키는 객체x의 값은 10. 따라서 10 출력
main메서드 위로 println메서드 호출스택에 올라가고 출력하고(작업수행) 사라짐
14. main메서드 더이상 실행할 문장 X , 종료되면서 호출스택에서 제거되고 스택은 완전히 비워지게 됨.
* 객체 x와 지역변수 x 이름만 같다. 전혀 다른 공간이다.
* 따라서 지역변수를 바꾼 거지, d가 가리키는 객체x의 값은 여전히 10이다.
* 심지어 바꿀 수도 없다! 왜냐면, 기본형 매개변수이기 때문이다.
* 기본형 매개변수는 오직 읽기만 가능! 객체x에 저장된 값을 바꿀 수 없다!
* 만약 객체 x값을 바꾸고 싶다면, 참조형 매개변수여야 함.
예제 코드만 보고 스택 그림 그려봐라~!
ch6-24 참조형 매개변수
(참조형 매개변수 : 메서드의 매개변수의 타입이 참조형이라는 것)
> 기본형 매개변수 - 변수의 값을 읽기만 할 수 있다.(read only)
> 참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다.(read & write)
위의 참조형 매개변수 예제 단계별 과정.
1. 프로그램 실행 -> main메서드 호출되면서 스택에 main메서드 올라감
2. main메서드 첫줄 실행하면 먼저 참조변수 d만들어지고 Data2의 객체 만들어짐 : 처음엔 0으로 자동초기화됨.
만약 주소가 100번지면 이 주소값 100번지가 대입연산자에 의해서 d에 대입됨.
3. 참조변수 d가 가리키는 객체 x값에 10을 저장.
4. println -> d.x값은 10출력
println메서드가 main메서드 위로 호출스택에 올라감 -> 실행 (10 출력) -> 메서드 종료-> 호출스택에서 사라짐 -> main메서드로 돌아옴
5. change메서드 호출
(참조변수 d를 줌, main메서드의)
main메서드는 대기상태로 돌입, change메서드 실행상태
6. change메서드의 참조형 매개변수에 d값 : 100번지가 대입됨,복사됨.
7. 1000을 참조변수 d가 가리키는 x에 저장.
여기서 d는 change메서드의 지역변수d
change의 지역변수d가 가리키는 객체 x값을 1000으로 바꾼다.
8. println-> d가 가리키는 x의 값 : 1000 을 출력
9. change메소드로 돌아옴
10. 더이상 실행할 문장 X. change메서드 종료
11. 호출한 곳으로 돌아감.
12. main 메서드로 돌아감. 대기상태였던 main메서드 실행상태 돌입
13. println -> After chage 출력
14. println -> d가 가리키는 객체 x의 값 1000 출력
15. main메서드 더이상 실행할 문장 X, 종료, 스택 완전히 비워짐, 프로그램 종료
참조형 매개변수를 사용하기 때문에, main메서드의 참조변수 d가 가리키는 객체 x의 값을 바꿀 수 있다.
main메서드가 change메서드를 호출할 때, main메서드에 있는 지역변수 d의 값을 change메서드에 있는 지역변수로 복사해준 거임.
change에 있는 참조변수d도 객체를 같이 가리킬 수 있게 된 거임.
차이점.
main메서드가 단순히 객체가 가진 값을 줬는데, 이번에는 객체가 어디 저장되어있는지 그 주소를 준 거임.
객체를 다룰 수 있는 주소값을 주니까, change메서드에서 객체를 다룰 수 있게 된 거임.
참조형 매개변수를 통해서, 객체의 주소를 전달해주면, 참조변수를 이용해서 객체를 다룰 수 있게 됨.
객체의 주소를 아니까, 값을 읽어올 수도 쓸 수도 있는 거임.
(이 객체에 대한 참조변수를 갖고 있으니까 )
ch6-25 참조형 반환타입
반환타입이 참조형인 경우에, 객체의 주소를 반환한다.(=객체를 반환)
(참조형 : 객체 주소를 주고받아)
코드만 보고 그림을 하나하나 그려보거라!!!!!!
감 잡힐 때까지 그림을 그려보면, 완전히 이해할 수 있다!!!!!!
오늘 집에서 하기 약속

'자바의 정석 가자!' 카테고리의 다른 글
[자바의 정석 - 기초편] Chapter6 - 30,31 오버로딩(overloading) (0) | 2022.10.27 |
---|---|
[자바의 정석 - 기초편] Chapter6 - 26 ~ 29 static메서드(클래스 메서드)와 인스턴스 메서드 (0) | 2022.10.26 |
[자바의 정석 - 기초편] Chapter6 - 22 호출스택(call stack) (0) | 2022.10.24 |
[자바의 정석 - 기초편] Chapter6 - 14 ~21 메서드란? , 메서드의 선언부와 구현부, 메서드 호출, return문, 반환값 (0) | 2022.10.23 |
[자바의 정석 - 기초편] Chapter6 - 9 ~ 15 클래스의 정의, 선언위치 변수종류, 클래스변수와 인스턴스변수 (2) | 2022.10.21 |