EOF(End of File)
EOF란 데이터 소스로부터 더이상 읽을 데이터가 없음을 나타내는 용어이다.
데이터 소스란?
데이터를 제공하는 주체
파일을 읽을 때 -> 파일이 데이터 소스
네트워크에서 데이터를 수신할 때 -> 소켓이 데이터 소스
사용자 입력을 받을 때 -> 키보드(표준 입력)이 데이터 소스
데이터베이스에서 데이터를 조회할 때 -> DB가 데이터 소스
예를 들어 파일을 읽을 때, 파일의 끝이 나타나면 자동적으로 EOF가 발생하는 것.
EOF를 사용한 백준 문제

참고로 Scanner를 사용할 때와, Buffer를 사용할 때 EOF를 처리하는 방식이 다르다.
이 문제에서는 Buffer를 사용해서 문제를 해결했다.
원래 데이터 소스를 읽어들이는 과정에서 null인 경우를 EOF로 판단해서 입력을 종료해야 하지만,
인텔리제이를 사용해서 해당 알고리즘 문제를 풀었기 때문에 따로 null을 전달할 수 없어서 isEmpty()를 추가했다.
그렇기 때문에 아래 코드는 ""가 입력된 경우 EOF로 판단하고 종료하는 코드이다.
package baekjoon;
import java.io.*;
public class B10952 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String inputString;
int sum;
while ((inputString = br.readLine()) != null && !inputString.isEmpty()) {
String[] inputStringArray = inputString.split(" ");
sum = 0;
for (int i = 0; i < inputStringArray.length; i++) {
sum += Integer.parseInt(inputStringArray[i]);
}
bw.write(sum + "\n");
}
bw.flush();
bw.close();
br.close();
}
}

이 문제 역시 EOF가 입력될 때까지 입력값을 출력하는 문제이다.
위의 문제와 다른 점이 있다면 줄바꿈을 허용한다는 것이다.
줄바꿈이 일어나도 계속 실행되어야 하기 때문에, IDE를 사용하면 이 프로그램을 종료하지 못한다..
그래서 백준에 바로 제출해서 결과를 봐야했다.
이번 문제는 Scanner를 사용해서 풀었다.
입력값을 추가 연산없이 그대로 출력하는 문제라 아주 간단하다!
스캐너는 EOF를 hasNext()를 사용해서 판단하기 때문에, 반복문의 조건식으로 사용해줬다.
package baekjoon;
import java.util.Scanner;
public class B11718 {
public static void main(String[] args) {
// 스캐너 사용
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String string = scanner.nextLine();
System.out.println(string);
}
scanner.close();
}
}
지난 번에 백준으로 첫 문제를 풀었음에도, 이 문제를 다시 만나니까 멈칫하게 됐다.
사실 어렵지 않은 문제이니까 확실히 익혀서 언제든 활용할 수 있도록 하자.
'개발 지식' 카테고리의 다른 글
MySQL 아키텍처 (0) | 2025.04.04 |
---|---|
프로세스와 스레드의 동작 원리 (0) | 2025.03.23 |
웹서버 애플리케이션 관점에서의 Thread Pool (0) | 2025.03.21 |
NullPointerException(NPE) 런타임 에러 (1) | 2025.03.11 |
JVM 메모리 구조 (0) | 2025.02.25 |