자바가 미리 만들어둔 편의 도구 세트인 I/O API
📘 자바 표준 입출력과 파일 관리 도구
1. System.in field (표준 입력 스트림)
- 비유: 우리 집으로 들어오는 '메인 상수도관'입니다.
- 설명: 콘솔(키보드)로부터 데이터를 입력받을 때 사용하는 바이트 기반 InputStream입니다.
- 특징: 바이트 단위로만 읽기 때문에 한글 처리가 불편해 보통 Scanner나 InputStreamReader로 감싸서 사용합니다.
Java
import java.io.IOException;
import java.io.InputStream;
public class SystemInExample {
public static void main(String[] args) throws IOException {
System.out.print("영문자 하나만 입력하고 엔터: ");
InputStream is = System.in;
// 한 바이트를 읽어 아스키 코드 숫자로 반환합니다.
int data = is.read();
System.out.println("입력한 문자의 아스키 코드: " + data);
System.out.println("실제 문자: " + (char)data);
}
}
2. System.out field (표준 출력 스트림)
- 비유: 하수도로 물을 내보내는 '메인 배수관'입니다.
- 설명: 콘솔(모니터)로 데이터를 출력할 때 사용하는 PrintStream 객체입니다.
- 특징: 우리가 매일 쓰는 println() 메서드의 주인공이며, 어떤 자료형이든 문자열로 변환해 화면에 뿌려줍니다.
Java
public class SystemOutExample {
public static void main(String[] args) {
// System.out은 PrintStream 타입의 정적 필드입니다.
System.out.println("이것은 가장 표준적인 출력 방법입니다.");
System.err.println("이것은 에러 메시지용 출력입니다 (빨간색으로 보일 수 있음)");
}
}
3. Scanner class (입력 종합 선물세트)
- 비유: System.in이라는 수도관에 끼우는 '다기능 정수기'입니다.
- 설명: System.in은 바이트 단위라 다루기 힘들지만, Scanner는 이를 문자, 정수, 실수 등 원하는 타입으로 딱딱 잘라서 가져와 줍니다.
- 특징: 공백( )이나 엔터(\n)를 기준으로 데이터를 분리해 읽어오기에 매우 편리합니다.
Java
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// System.in을 Scanner로 감싸서 사용하기 편하게 만듭니다.
Scanner sc = new Scanner(System.in);
System.out.print("이름과 나이를 띄어쓰기로 구분해서 입력하세요: ");
String name = sc.next(); // 문자열 읽기
int age = sc.nextInt(); // 정수 읽기
System.out.printf("반갑습니다 %s님! 내년에 %d살이 되시는군요.\n", name, age + 1);
sc.close(); // 다 쓴 스캐너는 닫아주는 것이 좋습니다.
}
}
4. File class (파일 및 디렉토리 관리자)
- 비유: 파일 자체가 아니라, 파일을 가리키는 '명찰' 또는 '부동산 정보지'입니다.
- 설명: 실제 파일의 내용을 읽고 쓰는 게 아니라, 파일의 경로, 이름 확인, 삭제, 폴더 생성 등 파일의 정보를 관리합니다.
Java
import java.io.File;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) throws IOException {
// 1. 파일 객체 생성 (실제 파일이 만들어지는 건 아닙니다)
File file = new File("example.txt");
// 2. 파일이 실제로 존재하는지 확인하고 없으면 생성
if (!file.exists()) {
System.out.println("파일이 없네요. 새로 만듭니다.");
file.createNewFile();
}
// 3. 파일 정보 출력
System.out.println("파일 경로: " + file.getAbsolutePath());
System.out.println("읽기 가능 여부: " + file.canRead());
System.out.println("파일 크기: " + file.length() + " bytes");
// 4. 삭제 (테스트 후 지우고 싶을 때)
// file.delete();
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- System.in/out은 자바 프로그램이 시작되자마자 자동으로 열리는 스트림입니다. 우리가 따로 new 할 필요가 없어요.
- Scanner는 System.in 뿐만 아니라 File 객체를 넣어서 파일 내용을 읽을 때도 사용할 수 있습니다.
- File 클래스는 "파일 안의 내용물"에는 관심이 없습니다. 오직 "그 파일이 어디 있는지, 이름이 뭔지, 크기가 얼마인지" 같은 껍데기 정보만 다룹니다.
오늘의 요약
- System.in/out: 키보드 입력과 모니터 출력을 담당하는 기본 통로.
- Scanner: System.in을 더 쉽고 강력하게 쓰게 해주는 도구.
- File: 파일 시스템(경로, 생성, 삭제)을 관리하는 비서.
이제 자바 프로그램과 외부 세계(키보드, 모니터, 파일 시스템)가 어떻게 소통하는지 완벽하게 이해하셨네요!

'JAVA 80%' 카테고리의 다른 글
| Thread (0) | 2026.01.31 |
|---|---|
| Decorator Stream (0) | 2025.11.06 |
| I/O Stream (0) | 2025.11.06 |
| LIFO/FIFO collection - Stack - Queue (0) | 2025.11.06 |
| Collection framework (0) | 2025.11.05 |