강의

멘토링

로드맵

Inflearn brand logo image

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

cho766님의 프로필 이미지
cho766

작성한 질문수

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

보이지 않는 임시 객체

임시 객체의 첫 번째 상황에 대한 질문

해결된 질문

작성

·

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 답변과 더불어 참고하시기 바랍니다. 😄

cho766님의 프로필 이미지
cho766
질문자

답변 덕분에 맥락을 더 잘 이해했습니다 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. cho766님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의와 관련된 질문에 대한 답변을 드리겠습니다.

임시 객체는 보통 함수에서 반환되는 객체가 특별히 변수에 할당되지 않은 경우를 의미합니다. 예를 들어, 함수 get()이 새로운 Class 객체를 반환할 때, 이를 받는 쪽에서 바로 저장하지 않으면 그 객체는 임시 객체로 간주될 수 있습니다.

  • 임시 객체 생성 상황: Class get() { return new Class(); }에서 반환된 객체는 함수 호출 결과를 받을 곳이 없으면 임시 객체로 존재하게 됩니다.
Class value = get();

위의 value 변수에 get() 함수로 반환된 객체의 참조를 할당하는 경우, 이 객체는 더 이상 임시 객체가 아니라 value라는 명시적인 참조자에 의해 관리됩니다. 즉, value가 해당 객체를 가리키기 때문에 이 시점부터는 임시적인 것이 아니라 명확한 관리 대상으로 변합니다.

반환된 객체가 참조자에 의해 관리되므로, 이 객체는 변수에 저장되고 이후에 사용될 수 있습니다. 이것이 바로 임시 객체가 아닌 경우입니다.

관련된 주제에 대한 추가적인 설명은 아래의 링크에서 확인하실 수 있습니다. 이는 유사한 질문에 대한 답변을 포함하고 있어 이해를 돕는 데 도움을 줄 것입니다:
- 임시 객체와 상수형 참조에 대한 설명

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cho766님의 프로필 이미지
cho766

작성한 질문수

질문하기