용어/java

[국비][JAVA] 참조값 및 객체 이해하기_예시

줌인. 2024. 5. 30. 21:46

▶ 기본형 / 참조형 이해

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 변수에 저장

- 따라서 두 개의 주소값에 모두 접근 가능

 

[예제 도식화]

728x90