충분히 쌓여가는
.close() 본문
자바에서 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 |