해결된 질문
작성
·
29
·
수정됨
0
강의에서 임시 객체가 생성되는 첫 번째 상황으로 클래스가 함수의 반환 자료형이 될 경우 (이름이 없는) 임시 객체를 생성을 언급해주셨습니다.
이 경우가 아래와 같은 상황을 말하는걸까요?
Class get() {
return new Class();
}
그렇다면, 해당 함수(메서드)로 받은 인스턴스에 대한 참조자가 생긴다면, 그 때는 임시 객체가 아니게 되는건가요?
Class value = get();
답변 2
1
Java에서 new 연산으로 만들어진 인스턴스에 대한 접근 방법은 참조자로 한정됩니다. get() 메서드가 반환한 인스턴스를 value에 할당 했다면 value의 유효범위만큼 인스턴스는 살아남아 있다가 GC에 의해 회수됩니다. 이 경우 명백히 value라는 참조자가 존재하므로 임시 객체라 보기는 어렵겠습니다. 보통의 임시 객체란 참조자가 없는 것은 물론 대부분의 경우 한 구문 내에 존재하다가 접근할 수 없게 됩니다.
예로 보여준 Class 클래스에 testFunc()라는 메서드가 있었다면
get().testFunc(); 같은 코드가 가능합니다. 이런 경우 get()이 반환한 인스턴스가 임시 객체로 볼 수 있겠습니다. 인프런 AI 답변과 더불어 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. cho766님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의와 관련된 질문에 대한 답변을 드리겠습니다.
임시 객체는 보통 함수에서 반환되는 객체가 특별히 변수에 할당되지 않은 경우를 의미합니다. 예를 들어, 함수 get()
이 새로운 Class
객체를 반환할 때, 이를 받는 쪽에서 바로 저장하지 않으면 그 객체는 임시 객체로 간주될 수 있습니다.
Class get() { return new Class(); }
에서 반환된 객체는 함수 호출 결과를 받을 곳이 없으면 임시 객체로 존재하게 됩니다.Class value = get();
위의 value
변수에 get()
함수로 반환된 객체의 참조를 할당하는 경우, 이 객체는 더 이상 임시 객체가 아니라 value
라는 명시적인 참조자에 의해 관리됩니다. 즉, value
가 해당 객체를 가리키기 때문에 이 시점부터는 임시적인 것이 아니라 명확한 관리 대상으로 변합니다.
반환된 객체가 참조자에 의해 관리되므로, 이 객체는 변수에 저장되고 이후에 사용될 수 있습니다. 이것이 바로 임시 객체가 아닌 경우입니다.
관련된 주제에 대한 추가적인 설명은 아래의 링크에서 확인하실 수 있습니다. 이는 유사한 질문에 대한 답변을 포함하고 있어 이해를 돕는 데 도움을 줄 것입니다:
- 임시 객체와 상수형 참조에 대한 설명
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 덕분에 맥락을 더 잘 이해했습니다 감사합니다!