[DEV] J-Jay

Java I/O - 1 본문

Back-end/Java

Java I/O - 1

J-Jay 2023. 5. 1. 18:02
728x90
I/O란?
  • Input & Output(입출력)
  • 입력 :  키보드, 네트워크, 파일 
  • 출력 :  화면, 네트워크. 파일
Java I/O도 객체
  • I/O에서 사용되는 객체는 어떤 대상으로 부터 읽어들여, 어떤 대상에게 쓰는 일을 한다.

Java I/O는 Decorator 패턴

Java Design 패턴 중 Decorator 패턴

1. Component 인터페이스: Decorator 패턴에서 Component는 데코레이션될 객체와 데코레이터 객체에 공통으로 구현할 메서드를 정의

public interface Component {
    public void operation();
}

2. ConcreteComponent 클래스: Component 인터페이스를 구현하는 구체적인 객체

public class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("ConcreteComponent의 operation() 메서드를 호출합니다.");
    }
}

3. Decorator 클래스: Component 인터페이스를 구현하며 데코레이션을 추가할 수 있는 데코레이터 객체

public abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    public void operation() {
        component.operation();
    }
}

4. ConcreteDecoratorA, B 클래스: Decorator 클래스를 상속하며 추가적인 데코레이션을 제공하는 구체적인 데코레이터 객체

public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }

    public void operation() {
        super.operation();
        addedBehavior();
    }

    public void addedBehavior() {
        System.out.println("ConcreteDecorator 객체에서 추가된 메서드를 호출합니다.");
    }
}

5. 위의 클래스를 사용하여 데코레이션 추가

Component component = new ConcreteComponent();
component.operation(); // "ConcreteComponent의 operation() 메서드를 호출합니다." 출력

Component decoratedComponent = new ConcreteDecorator(new ConcreteComponent());
decoratedComponent.operation(); // "ConcreteComponent의 operation() 메서드를 호출합니다."와 "ConcreteDecorator 객체에서 추가된 메서드를 호출합니다." 출력

 

위의 예제가 어렵다면 단순하게 생각해보자.

ex) 케잌에서의 주인공과 장식(Decorater)은?

      주인공: 빵

      장식: 생크림, 과일 등


Java I/O에서 주인공과 장식은?

주인공(ConcreateComponent)

  • 어떤 대상에게서 읽어들일지, 쓸지를 결정
  • 1byte or byte[] 단위로 읽고 쓰는 메소드를 가짐
  • 1char or char[] 단위로 읽고 쓰는 메소드를 가짐

장식

  • 추상클래스 Component(InputStream, OutputStream, Reader Writer)를 생성자에게서 받아들인다. 
    → 생성자에서 위의 4가지를 받아들인다면 전부 장식이다! (중요!)
  • Decorator 생성자는 Component를 받아들여야 한다.
  • 다양한 방식으로 읽고 쓰는 메소드를 가진다.
Java IO의 특수한 객체
  • System.in : 표준 입력(InputStream)
  • System.out : 표준 출력(PrintStream)
  • System.err : 표준 에러 출력(PrintStream)
Java I/O 상속도

Java I/O 클래스 상속도

xxxStream  byte 단위 입출력 클래스
xxxInputStream byte 단위로 입력을 받는 클래스
xxxOutputStream byte 단위로 출력을 하는 클래스
xxxReader 문자 단위로 입력을 받는 클래스
xxxWriter 문자 단위로 출력을 하는 클래스
Filexxx (File Class 제외) File로부터 입력이나 출력을 하는 클래스
ByteArrayxxx 입력 클래스의 경우 byte 배열로 부터 읽고, 출력 클래스의 경우 클래스 내부의 자료구조에 출력 한 후, 출력된 결과를 byte배열로 반환하는 기능
CharArrayxxx 입력 클래스의 경우 char 배열로부터 읽고, 출력 클래스의 경우 클래스 내부의 자료구조에 출력 한후, 출력된 결과를 char 배열로 반환하는 기능
Filterxxx Filter로 시작하는 입출력 클래스는 직접 사용하는 것 보다는 상속받아 사용 하며, 사용자가 원하는 내용만 필터링할 목적으로 사용
Dataxxx 다양한 데이터 형을 입출력 할 목적으로 사용
특히 기본형 값(int, float, double 등)을 출력하는데 유리
Bufferedxxxx 프로그램에서 Buffer라는 말은 메모리를 의미
입출력 시에 병목현상을 줄이고 싶을 경우 사용
RandomAccessFile 입력이나 출력을 모두 할 수 있는 클래스, 파일에서 임의의 위치의 내용을 읽거나 쓸수 있는 기능을 제공

 

'Back-end > Java' 카테고리의 다른 글

Java 17 주요변화  (0) 2023.08.31
Java I/O - 2  (0) 2023.05.02
인터페이스(interface)  (0) 2023.04.30
추상(abstract)  (0) 2023.04.30
Generic  (0) 2023.04.29