JAVA 80%

I/0 API

lshjju 2025. 11. 6. 16:08

자바가 미리 만들어둔 편의 도구 세트인 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();
    }
}

👨‍🏫 쉽게 이해하는 핵심 포인트

  1. System.in/out은 자바 프로그램이 시작되자마자 자동으로 열리는 스트림입니다. 우리가 따로 new 할 필요가 없어요.
  2. Scanner는 System.in 뿐만 아니라 File 객체를 넣어서 파일 내용을 읽을 때도 사용할 수 있습니다.
  3. 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