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 패턴
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 상속도
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 | 입력이나 출력을 모두 할 수 있는 클래스, 파일에서 임의의 위치의 내용을 읽거나 쓸수 있는 기능을 제공 |