Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

.close() 본문

Java

.close()

빌드이너프 2023. 1. 13. 15:14
자바에서 import java.util.Scanner;을 하면 항상 마지막에 .close()가 붙게 된다.
없어도 그만인 .close()가 왜 필요한지 궁금하여 찾아보았다
  • close 메소드 호출은 메모리 가비지 컬렉션하고는 관계가 없음(간접적으로만 있을 뿐 본 목적이 그게 아님)
  • close 메소드의 진짜 목적은 OS자원을 다시 되돌림

 

  • 표준 입출력은 프로세스마다 부여됨
  • 자바로 프로그램을 만듬 -> 실행 -> 프로세스 생성
  • System.out.println(); 같은 메소드를 호출하여 표준출력 -> System.in 을 활용해 표준입력을 받음
  • 이 표준입출력은 OS자원이긴 한데 프로세스마다 따로 받기 때문에 문제 없다

 

  • Scanner 생성할 때 System.in 대신에 다른걸 넣을 수 있음(파일을 읽게 만든다든지, 네트워크에서 읽어온다든지) 이런 걸 OS가 관리해 줌

.close() 오류

  • import java.util.Scanner;를 해서 Scanner를 사용하고 마지막에 scanner.close();로 반납

 

오류 발생한 경우

  • nextLine()이나 next()를 사용해 문자열을 입력받는데 scanner를 이용한 경우

 

오류 발생하지 않은 경우

  • 위의 경우를 제외, nextInt() 등 정수를 입력받는데 사용한 경우 등

 

문제이유

  • scanner.close();를 아예 main 메서드의 마지막에서 함

 

해결방법

  • scanner를 main 메서드에서가 아닌, 처음 정의한 메서드에서 닫아야 함

'Java' 카테고리의 다른 글

주석문  (0) 2023.01.25
자바 프로그램 구조  (0) 2023.01.25
Scanner vs BufferedReader/BufferedWriter  (0) 2023.01.10
기본형과 참조형  (0) 2023.01.09
변수 variable  (0) 2023.01.06