해결된 질문
작성
·
47
0
안녕하세요!
강의 중 예외 처리에서 finally에 대해 설명해주신 부분을 듣다가 궁금한 점이 생겨 질문드립니다.
강의에서 finally는 주로 자원을 정리하는 데 사용된다고 하셨는데, 여기서 궁금한 점은 “null로 값을 할당하면 메모리에서 자원이 해제되는 것인지”, 아니면 단순히 “null이라는 값이 할당되는 것인지”입니다.
출력문에서 null로 바뀐 객체가 여전히 출력되는 걸 보면, 메모리를 해제하는 게 아니라 null 값을 할당하는 것 같기도 해서요.
이럴 경우 finally에서 말하는 ‘자원 정리’가 ‘메모리 정리’와 같은 의미로 이해하면 되는 건지, 아니면 별개의 개념으로 봐야 하는지도 헷갈립니다.
혹시 이 부분에 대해 조금 더 설명해주실 수 있을까요?
답변 2
0
인프런 AI 인턴의 설명이 훌륭하네요 ㅎㅎ
제가 obj = null로 할당한 예제를 보여드린 것으로 약간 헷갈리신 것 같습니다.
null 할당은 객체가 GC의 대상이 되도록 도울 수 있습니다. 왜냐면 GC는 참조가 되지 않은 객체를 메모리에서 제거하거든요.
즉 변수에 null을 할당하는 것은 메모리에서 객체를 직접 해제하는 행위가 아닙니다.
finally블록은 설명드렸다시피 return문을 만나더라 해도 반드시 실행이 보장되는 코드 블록입니다.
그러하여 일반적으로 finally에는
파일 스트림 (FileInputStream, FileOutputStream 등)
네트워크 소켓 연결 (Socket)
데이터베이스 연결 (Connection)
그래픽 리소스 등
위 항목의 자원을 정리할 때 주로 사용된다고 보시면 되겠습니다.
반드시 위와 같은 경우가 아니더라해도 제가 예제로 보여드린 바와 같이 더 이상 사용되지 않는
힙 영역의 객체를 참조를 끊어주기 위해서도 종종 사용된다고 보시면 되겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. Ellie님.
질문해주신 자원 정리와 관련된 내용을 명확히 이해할 수 있도록 설명해드리겠습니다.
null 값을 할당:
null
을 할당하는 것은 해당 변수가 더 이상 특정 객체를 참조하지 않도록 만드는 것입니다. 이는 해당 객체에 대한 참조가 끊어졌음을 선언하는 것이지만, 즉시 메모리가 해제되는 것은 아닙니다.null
을 할당하는 것은 가비지 컬렉션이 해당 메모리를 회수할 수 있게 신호를 보내는 행위라고 이해하시면 좋습니다.자원 정리:
따라서, finally에서 자원 정리란 null
을 할당하는 것과 직접적으로 관련이 없으며, 시스템 자원을 마무리하고 정리하는 코드가 위치하는 곳입니다. 예를 들어, 파일 스트림을 종료하거나, 데이터베이스 연결을 닫는 방식으로 사용됩니다.
이 주제와 관련된 링크를 확인하시어 보다 구체적인 예시와 설명을 살펴보실수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.