▶ 기본형 / 참조형 이해
https://zoooom-in.tistory.com/45
[김영한_자바기본][2.기본형과 참조형] 기본형 / 참조형 이해 (p.1-6)
참조값에 접근한다는 것은 설계도와 부지 위치에 접근해서 같이 공동 작업을 하는 것이다. 기본형은 실제 값이 저장되어 독립적으로 관리되지만, 참조형은 변수에는 객체 위치(참조값)가 저장
zoooom-in.tistory.com
▶ 기본형 / 참조형 - 메서드에 객체 반환
https://zoooom-in.tistory.com/66
[김영한_자바기본][2. 기본형과 참조형] (보충) 메서드에 객체 전달 / 메서드에서 객체 반환 / NullPo
▶ 1. 클래스와 데이터 : 클래스 생성 + 클래스의 이해 https://zoooom-in.tistory.com/65 [김영한_자바기본][1.클래스와 데이터] (보충) 배열 / 클래스 생성 / 배열 + 클래스 이해 (p.14, p.17, ▶ 배열의 선언과
zoooom-in.tistory.com
[Test class]
public class Test {
int level;
}
[TestStudyReturn : 반환 X ]
public class TestStudyReturn {
//void 데이터 타입을 반환하지 않음
public void t5(Test t) {
System.out.println(t.level);
t.level = 200;
t = new Test();
t.level = 500;
}
}
- Test타입의 '주소값'을 전달받아 활용
- 전달받은 주소값의 레벨 출력
- 전달받은 주소값에 레벨 200이라는 값을 넣음 (x001에 200이 담김)
- 새로운 객체(x002)가 생성되며, 이는 힙영역에 생성되고 주소값 x002를 담은 t는 지역변수 즉 스택영역에 담김
- 주소값 x002에 레벨 500이라는 값을 담음
만약 x002를 return했다면 추후에 해당 주소값을 사용할 수 있음 |
[TestMain : 반환 X]
public class TestMain {
public static void main(String[] args) {
TestStudyReturn sr = new TestStudyReturn();
Test test = new Test();
test.level = 1;
sr.t5(test);
System.out.println(test.level);
}
}
- 설계도 Test와 똑같은 타입의 test를 생성하고 그 주소값(x001)을 변수에 담음
- level의 초기값은 0이지만, '.'을 통해 test에 level에 접근하여 1을 담음
- x001이라는 '주소값'을 전달하고, TestStudyReturn에 있는 t5메서드 실행
- 'x001에 대한' 레벨을 물어보는 것
※ 헷갈릴 때 꿀팁! : 반환받은게 없다면, main메서드에서 내가 가진 주소값만 있다고 생각하자 |
[예제 도식화]
==== Test type을 반환한다면 ==
[TestStudyReturn : 반환 O ]
public class TestStudyReturn {
//void 데이터 타입을 반환하지 않음
public Test t5(Test t) {
System.out.println("전달받은 주소값의 초기 레벨 : " + t.level);
t.level = 200;
t = new Test(); //Test type의 객체를 생성했기 때문
t.level = 500;
return t; //Test type의 주소값을 전달
}
}
- 동일하게 새로운 객체(x002)가 힙영역에 생성되고 주소값 x002를 담은 t는 지역변수 즉 스택영역에 담김
- 그리고 새로운 객체(x002)의 주소값을 반환
[TestMain : 반환 O]
public class TestMain {
public static void main(String[] args) {
TestStudyReturn sr = new TestStudyReturn();
Test test = new Test();
test.level = 1;
//새로운 Test타입 t를 반환 받고, 변수에 할당
Test t = sr.t5(test);
System.out.println("전달한 주소값의 레벨 : " + test.level); //lv = 200
System.out.println("전달받은 주소값의 레벨 : " + t.level); //lv =500
}
}
- 반환한 주소값(새로운 객체)를 Test type 변수에 저장
- 따라서 두 개의 주소값에 모두 접근 가능
[예제 도식화]
'용어 > java' 카테고리의 다른 글
[국비][JAVA] 인터페이스와 추상(abstract) 차이 (0) | 2024.06.02 |
---|---|
[국비][JAVA] 메서드 오버로딩, 오버라이딩 차이 (0) | 2024.05.30 |
[국비][JAVA] 배열 이해 및 기본형, 참조형 기본 값 (0) | 2024.05.28 |
[국비][JAVA] 자바 메모리 영역 (0) | 2024.05.28 |
[국비][JAVA] 오버플로우와 언더플로우 개념 / 쉬프트 연산자 (0) | 2024.05.27 |