인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

서정원님의 프로필 이미지
서정원

작성한 질문수

김영한의 실전 자바 - 기본편

기본형 참조형 관련 질문

해결된 질문

작성

·

374

0

기본형과 참조형에 대하여 궁금증이 생겨서 질문을 남깁니다.

public class question {
    public static void main(String[] args) {
        int a = 10;
        doubleNumber(a);
        System.out.println("a = " + a);
    }
    public static void doubleNumber(int x){
        int result = x*2;
        System.out.println("doubleResult = " + result);
    }
}

doubleNumber라는 메서드를 만나게 되면 int x에 a의 값인 10이 복사되어 들어간 다음 2배 증가된 이후 result에 대입이 된 이후 print를 한 뒤에 메서드가 종료되면 result가 사라지는 것으로 알고있습니다.

public class Method2 {
    public static void main(String[] args) {

        Student student1 = createStudent("학생1", 15, 90);
        Student student2 = createStudent("학생2", 17, 80);

       printStudent(student1);
       printStudent(student2);
    }
    static Student createStudent(String name,int age, int grade){
        Student student = new Student();
        student.name = name;
        student.age=age;
        student.grade = grade;
        return student;
    }
    static void printStudent(Student student){
        System.out.println("이름:" +student.name+"나이:"+student.age+"성적:"+student.grade);
    }
}

createStudent라는 메서드에서는 student의 참조값을 리턴을 하기 때문에 Student student1=createStudent()를 하게 되면 new Student를 실행한 그 객체의 참조값이 넘어오는 것 까지는 이해를 했습니다. createStudent메서드가 끝나면 메서드 안에 있는 student는 계속 살아있는 것인지 아니면 다른 어떤 것들이 있는지 궁금합니다.

답변 1

4

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 서정원님

질문을 상대방이 이해하기 쉽게 잘 풀어서 설명해주셨네요 🙂

student 변수도 일반적인 지역 변수 입니다. 따라서 메서드가 종료되면 student 변수도 제거됩니다.

여기서 중요한 것은 student 변수가 제거되는 것이지 new Student로 생성한 Student 인스턴스는 유지됩니다. 그리고 반환된 해당 인스턴스의 참조값은 student1, student2에서 사용됩니다.

감사합니다.

서정원님의 프로필 이미지
서정원
질문자

아하 student라는 변수는 제거가 되지만 new Student로 생성된 인스턴스는 유지가 되는군요! new Student를 가리키는 student(참조값)를 return하여 student1,student2에서 사용이 되는것이네요! 감사합니다!

서정원님의 프로필 이미지
서정원

작성한 질문수

질문하기