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

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

Ellie님의 프로필 이미지

작성한 질문수

C# 프로그래밍 기초부터 실전 활용까지

예외 처리(finally)

자원정리 개념

해결된 질문

작성

·

47

0

안녕하세요!

강의 중 예외 처리에서 finally에 대해 설명해주신 부분을 듣다가 궁금한 점이 생겨 질문드립니다.

강의에서 finally는 주로 자원을 정리하는 데 사용된다고 하셨는데, 여기서 궁금한 점은 “null로 값을 할당하면 메모리에서 자원이 해제되는 것인지”, 아니면 단순히 “null이라는 값이 할당되는 것인지”입니다.

 

출력문에서 null로 바뀐 객체가 여전히 출력되는 걸 보면, 메모리를 해제하는 게 아니라 null 값을 할당하는 것 같기도 해서요.

이럴 경우 finally에서 말하는 ‘자원 정리’가 ‘메모리 정리’와 같은 의미로 이해하면 되는 건지, 아니면 별개의 개념으로 봐야 하는지도 헷갈립니다.

 

혹시 이 부분에 대해 조금 더 설명해주실 수 있을까요?

답변 2

0

Kaburi님의 프로필 이미지
Kaburi
지식공유자

인프런 AI 인턴의 설명이 훌륭하네요 ㅎㅎ

제가 obj = null로 할당한 예제를 보여드린 것으로 약간 헷갈리신 것 같습니다.

 

null 할당은 객체가 GC의 대상이 되도록 도울 수 있습니다. 왜냐면 GC는 참조가 되지 않은 객체를 메모리에서 제거하거든요.

즉 변수에 null을 할당하는 것은 메모리에서 객체를 직접 해제하는 행위가 아닙니다.

 

finally블록은 설명드렸다시피 return문을 만나더라 해도 반드시 실행이 보장되는 코드 블록입니다.

그러하여 일반적으로 finally에는

  • 파일 스트림 (FileInputStream, FileOutputStream 등)

  • 네트워크 소켓 연결 (Socket)

  • 데이터베이스 연결 (Connection)

  • 그래픽 리소스 등

위 항목의 자원을 정리할 때 주로 사용된다고 보시면 되겠습니다.

 

반드시 위와 같은 경우가 아니더라해도 제가 예제로 보여드린 바와 같이 더 이상 사용되지 않는

힙 영역의 객체를 참조를 끊어주기 위해서도 종종 사용된다고 보시면 되겠습니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. Ellie님.

질문해주신 자원 정리와 관련된 내용을 명확히 이해할 수 있도록 설명해드리겠습니다.

  1. null 값을 할당:

    • 변수에 null을 할당하는 것은 해당 변수가 더 이상 특정 객체를 참조하지 않도록 만드는 것입니다. 이는 해당 객체에 대한 참조가 끊어졌음을 선언하는 것이지만, 즉시 메모리가 해제되는 것은 아닙니다.
    • .NET의 가비지 컬렉터(GC)가 실행될 때, 참조가 없는 객체를 찾아 메모리에서 해제합니다. 따라서 null을 할당하는 것은 가비지 컬렉션이 해당 메모리를 회수할 수 있게 신호를 보내는 행위라고 이해하시면 좋습니다.
  2. 자원 정리:

    • finally 블록에서 자원을 정리하는 것은 종종 파일, 네트워크 연결, 데이터베이스 연결 등의 *비관리 리소스*에 대해 이루어집니다. 이런 경우에는 직접적으로 관련 메소드를 호출해 연결을 해제하거나, 파일 스트림을 닫아주어야 합니다.
    • 메모리 상의 객체 정리와는 조금 다른 개념이지만, 프로그램이 자원을 효율적으로 관리할 수 있게 하는 주요 프로세스입니다.

따라서, finally에서 자원 정리null을 할당하는 것과 직접적으로 관련이 없으며, 시스템 자원을 마무리하고 정리하는 코드가 위치하는 곳입니다. 예를 들어, 파일 스트림을 종료하거나, 데이터베이스 연결을 닫는 방식으로 사용됩니다.

이 주제와 관련된 링크를 확인하시어 보다 구체적인 예시와 설명을 살펴보실수 있습니다:

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

Ellie님의 프로필 이미지

작성한 질문수

질문하기