본문 바로가기
라이브러리 파헤치기/Java

Java IO (java.io)

by SuldenLion 2024. 10. 7.
반응형

java.io 패키지에 있는 IO 라이브러리 파일 분석해보기

 

 

(이 파일은 자바 23버전이며, '@PreviewFeature(feature = PreviewFeature.Feature.IMPLICIT_CLASSES)'라는 어노테이션을 사용한 것을 볼 수 있다. 이는 프리뷰 기능으로 정식 라이브러리의 일부는 아니라고 한다)

 

/*
 * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.io;

import jdk.internal.javac.PreviewFeature;

/**
 * A collection of static convenience methods that provide access to
 * {@linkplain System#console() system console} for implicitly declared classes.
 *
 * <p> Each of this class' methods throws {@link IOError} if the system console
 * is {@code null}; otherwise, the effect is as if a similarly-named method
 * had been called on that console.
 *
 * <p> Input and output from methods in this class use the character set of
 * the system console as specified by {@link Console#charset}.
 *
 * @since 23
 */
@PreviewFeature(feature = PreviewFeature.Feature.IMPLICIT_CLASSES)
public final class IO {

    private IO() {
        throw new Error("no instances");
    }

    /**
     * Writes a string representation of the specified object to the system
     * console, terminates the line and then flushes that console.
     *
     * <p> The effect is as if {@link Console#println(Object) println(obj)}
     * had been called on {@code System.console()}.
     *
     * @param obj the object to print, may be {@code null}
     *
     * @throws IOError if {@code System.console()} returns {@code null},
     *                 or if an I/O error occurs
     */
    public static void println(Object obj) {
        con().println(obj);
    }

    /**
     * Writes a string representation of the specified object to the system
     * console and then flushes that console.
     *
     * <p> The effect is as if {@link Console#print(Object) print(obj)}
     * had been called on {@code System.console()}.
     *
     * @param obj the object to print, may be {@code null}
     *
     * @throws IOError if {@code System.console()} returns {@code null},
     *                 or if an I/O error occurs
     */
    public static void print(Object obj) {
        con().print(obj);
    }

    /**
     * Writes a prompt as if by calling {@code print}, then reads a single line
     * of text from the system console.
     *
     * <p> The effect is as if {@link Console#readln(String) readln(prompt)}
     * had been called on {@code System.console()}.
     *
     * @param prompt the prompt string, may be {@code null}
     *
     * @return a string containing the line read from the system console, not
     * including any line-termination characters. Returns {@code null} if an
     * end of stream has been reached without having read any characters.
     *
     * @throws IOError if {@code System.console()} returns {@code null},
     *                 or if an I/O error occurs
     */
    public static String readln(String prompt) {
        return con().readln(prompt);
    }

    private static Console con() {
        var con = System.console();
        if (con != null) {
            return con;
        } else {
            throw new IOError(null);
        }
    }
}

 

 

이 프로그램은 시스템 콘솔을 쉽게 사용할 수 있도록 돕는 유틸리티 클래스 제공한다. 

 

IO 클래스는 여러 정적 메서드를 통해 콘솔 입출력을 처리하며, 모든 메서드는 내부적으로 'System.console()'을 통해 콘솔에 접근한다. 콘솔이 없는 경우 'IOError' 예외를 던진다.

 

 

Class & Constructor

 

IO 클래스는 final로 선언되어 상속이 불가능하다.

IO 클래스의 생성자는 private으로 되어 있으므로 외부에서 인스턴스를 생성할 수 없다. (new IO() 시도 시 Error 발생)

이 클래스는 정적 메서드만 제공하므로 인스턴스를 생성할 필요가 없다.

 

 

println method

println 메서드는 전달된 객체 obj를 콘솔에 출력하고 줄 바꿈을 실행한다.

'con().println(obj)'를 호출, 'System.console()'을 통해 반환된 콘솔 객체에 출력한다.

콘솔이 없다면(System.console()이 null을 리턴한다면), IOError를 발생시킨다. (아래 con 메서드에 구현됨)

 

con method

'System.console()'을 호출하여 콘솔 객체를 반환하는 메서드이다.

예외 처리되는 콘솔이 없는 경우는, 일반적으로 IDE에서 실행되거나 콘솔이 없는 환경에서 프로그램이 실행될 때 발생한다.

 

 

print method

동작 방식은 println과 동일하며, 출력 후 줄바꿈을 하지 않는다는 차이만 가진다.

 

 

readln method

이 메서드는 콘솔에 프롬프트 메시지를 출력한 후, 사용자로부터 한 줄의 입력을 받는다.

입력받은 문자열을 반환하며, 읽은 문자의 끝에 줄바꿈 기호가 포함되지 않는다.

만약, EOF(End of file)에 도달하면 null을 반환한다.

print와 마찬가지로 콘솔이 없는 경우 IOError를 발생시킨다.

 

 

반응형

댓글