자바 객체지향 프로그래밍: 입출력 스트림의 세계
들어가며
자바에서 데이터를 처리하는 과정에서 입출력은 필수적입니다. 우리는 키보드로 데이터를 입력하거나 파일에서 데이터를 읽고, 또 데이터를 파일에 쓰는 등 여러 작업을 합니다. 자바는 이러한 작업을 간단하고 효율적으로 수행할 수 있도록 다양한 입출력 스트림 클래스를 제공합니다. 이번 포스트에서는 자바의 입출력 스트림에 대해 자세히 알아보고, 이를 활용하는 방법에 대해 살펴보겠습니다.
입출력 스트림이란?
입출력 스트림(Stream)은 데이터를 한 방향으로만 흐르게 하는 통로를 의미합니다. 자바에서는 응용 프로그램과 입출력 장치 간의 데이터 전송을 담당하는 소프트웨어 모듈로 입출력 스트림을 사용합니다. 스트림은 크게 두 가지로 나눌 수 있습니다:
- 입력 스트림 (Input Stream): 데이터를 입력 장치로부터 자바 프로그램으로 전달합니다.
- 출력 스트림 (Output Stream): 데이터를 자바 프로그램으로부터 출력 장치로 전달합니다.
스트림의 주요 특징
- 단방향 통신: 스트림은 단방향 통신을 지원합니다. 따라서 입력과 출력을 동시에 할 수 있는 스트림은 존재하지 않습니다.
- 선입선출 구조: 데이터는 먼저 들어온 것이 먼저 나가는 선입선출(FIFO) 구조를 따릅니다.
- 바이트 스트림과 문자 스트림: 자바에서는 데이터를 처리하는 기본 단위에 따라 바이트 스트림과 문자 스트림으로 나눕니다. 바이트 스트림은 바이너리 데이터를, 문자 스트림은 텍스트 데이터를 처리합니다.
자바의 입출력 스트림 클래스들
자바는 다양한 입출력 스트림을 제공하는데, 이들 클래스는 주로 java.io 패키지에 포함되어 있습니다. 가장 기본적인 클래스들에는 InputStream과 OutputStream이 있으며, 이들 클래스는 바이트 스트림을 처리합니다. 반면, 문자 스트림을 처리하는 클래스들은 Reader와 Writer로 끝나는 이름을 갖습니다.
- 바이트 스트림: FileInputStream, FileOutputStream, DataInputStream, DataOutputStream 등
- 문자 스트림: FileReader, FileWriter, InputStreamReader, OutputStreamWriter 등
스트림 사용 예제
입출력 스트림을 활용하여 파일에서 데이터를 읽고 쓰는 예제를 살펴보겠습니다.
- FileReader를 이용한 파일 읽기이 예제는 test.txt 파일을 읽어 문자 단위로 출력하는 코드입니다.
- FileReader fin = new FileReader("c:\\test.txt"); int c; while((c = fin.read()) != -1) { System.out.print((char)c); } fin.close();
- FileWriter를 이용한 파일 쓰기이 예제는 test.txt 파일에 문자 'A'를 쓰는 코드입니다.
- FileWriter fout = new FileWriter("c:\\Temp\\test.txt"); fout.write('A'); fout.close();
문자 집합을 사용한 스트림 처리
자바에서는 문자 데이터를 다룰 때 문자 집합(Charset)을 지정할 수 있습니다. 예를 들어, 한글 텍스트 파일을 처리할 때 MS949와 같은 문자 집합을 지정하여 정확한 인코딩/디코딩을 수행할 수 있습니다.
InputStreamReader in = new InputStreamReader(new FileInputStream("c:\\Temp\\hangul.txt"), "MS949");
버퍼를 활용한 효율적인 입출력
스트림에 버퍼를 추가하면 입출력 성능을 크게 개선할 수 있습니다. 버퍼는 데이터를 일시적으로 저장하여 운영체제의 API 호출을 줄이고, 한 번에 많은 데이터를 처리할 수 있게 합니다.
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("c:\\Temp\\test.out"));
마무리
자바의 입출력 스트림은 매우 강력하고 유연합니다. 우리는 단순한 파일 입출력부터 복잡한 네트워크 통신까지 다양한 작업을 처리할 수 있습니다. 자바의 입출력 스트림을 잘 이해하고 활용한다면, 더욱 효율적이고 강력한 프로그램을 작성할 수 있을 것입니다.
'Java' 카테고리의 다른 글
명품자바 프로그래밍의 기초: 10장 (0) | 2024.09.02 |
---|---|
명품자바 프로그래밍의 기초: 9장 (0) | 2024.09.02 |
명품자바 프로그래밍의 기초: 7장 (0) | 2024.08.25 |
명품자바 프로그래밍의 기초: 6장 (0) | 2024.08.18 |
명품자바 프로그래밍의 기초: 5장 (0) | 2024.08.14 |