ejyoo's 개발 노트

[Java] Scanner를 사용하고 자원 정리 측면에서 닫아야 할까? 본문

물음표 저장소

[Java] Scanner를 사용하고 자원 정리 측면에서 닫아야 할까?

ejyoovV 2023. 12. 5. 19:46

궁금해요 궁금해

코드프로그래머스에서 문제를 풀다가 Scanner를 닫는 사람이 있어서 궁금해졌다.

꼭 닫아야할까? JVM이 자동으로 정리해주지 않을까?

 

궁금증 해소

Scanner 객체를 초기화할 때, 어떤 파라미터를 주었냐에 따라 Scanner의 close() 메소드를 사용하는 것이 좋을 수 있다.그런데 코드프로그래머스에서 사용하는 Scanner는 대부분 사용자에게 입력을 받는 것이여서, 입력이 끝나고 나면 프로그램이 종료되면서 JVM이 자동으로 리소스를 정리해준다고 한다.

 

무조건적으로 Scanner를 사용하고 닫게되면 만약 System.in을 사용하는 경우 더이상 자원을 사용할 수 없어서 Scanner 객체를 새로 만들어야 할 것이다.

 

결론

System.in 인 경우 Scanner를 close() 호출하는 것은 필수가 아니다. 프로그램이 종료되면 JVM이 자동으로 정리해준다.

 

참고

- Scanner 클래스는 Closeable인터페이스를 구현한다. 사용이 끝난 후에 리소스를 해제하는 것이 중요하긴 하다.

- 파일이나 네트워크 리소스와 같은 외부 리소스를 사용할 때는 반드시 close()를 호출하여 자원을 정리해야 한다.