언어 및 도구들 공부/Java

Stream 2

Dr.Mlem 2024. 9. 28. 11:53

Q4.
일단 알겠어. 그런데 stream은 굳이 왜 만들어진 개념이야? 그것으로 변환해서 데이터를 주고 받아야 할 필요성이 있던거야?



스트림(Stream)은 데이터를 순차적으로 읽고 쓰는 데 사용되는 추상화된 개념으로, 다양한 데이터 소스와 목적지에 대해 일관된 방식으로 데이터를 처리할 수 있게 해줍니다. 스트림이 만들어진 이유와 그 필요성은 다음과 같습니다:

1. 데이터 소스와 목적지의 추상화
스트림은 파일, 네트워크 소켓, 메모리 등 다양한 데이터 소스와 목적지에 대해 동일한 방식으로 데이터를 처리할 수 있게 해줍니다. 이를 통해 개발자는 데이터 소스나 목적지에 상관없이 일관된 방식으로 데이터를 읽고 쓸 수 있습니다.

2. 데이터 처리의 효율성
스트림은 데이터를 바이트 단위로 순차적으로 처리하기 때문에, 메모리 사용을 최소화하고 데이터 처리의 효율성을 높일 수 있습니다. 예를 들어, 큰 파일을 한 번에 메모리에 로드하지 않고, 스트림을 사용하여 필요한 부분만 순차적으로 읽어들일 수 있습니다.

3. 입출력 작업의 단순화
스트림을 사용하면 입출력 작업이 단순해집니다. 스트림은 데이터를 읽고 쓰는 기본적인 작업을 추상화하여 제공하므로, 개발자는 복잡한 입출력 작업을 간단하게 처리할 수 있습니다.

4. 다양한 데이터 형식 지원
스트림은 바이트 스트림과 문자 스트림으로 나뉘어 다양한 데이터 형식을 지원합니다. 바이트 스트림은 바이너리 데이터를 처리하는 데 사용되며, 문자 스트림은 텍스트 데이터를 처리하는 데 사용됩니다.

예제 설명
주어진 코드에서 OutputStream을 사용하여 파일에 데이터를 쓰는 과정을 설명하겠습니다.

public void write(String filePath, byte[] data) throws Exception {
    OutputStream os = null;
    try {
        // 저장할 파일 스트림 생성
        os = new FileOutputStream(filePath);
        // 파일에 데이터 쓰기
        os.write(data);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        throw e;
    } catch (IOException e) {
        e.printStackTrace();
        throw e;
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

코드 설명
파일 스트림 생성: new FileOutputStream(filePath)를 통해 파일에 데이터를 쓸 수 있는 출력 스트림을 생성합니다.
데이터 쓰기: os.write(data)를 통해 바이트 배열 형태의 데이터를 파일에 씁니다. 여기서 data는 파일에 저장할 내용을 바이트 배열로 변환한 것입니다.
스트림 닫기: finally 블록에서 스트림을 닫아 자원을 해제합니다. 스트림을 닫지 않으면 파일이 계속 사용 중인 상태가 되어 다른 프로그램이 접근할 수 없게 됩니다.
바이트 배열로 변환하는 이유
파일에 데이터를 쓰기 위해서는 데이터를 바이트 단위로 처리해야 합니다. 예를 들어, 문자열을 파일에 쓰기 위해서는 문자열을 바이트 배열로 변환한 후, 이 바이트 배열을 출력 스트림을 통해 파일에 씁니다.

String text = "Hello, World!";
byte[] data = text.getBytes("UTF-8"); // 문자열을 바이트 배열로 변환
fileHelper.write("example.txt", data); // 바이트 배열을 파일에 쓰기

이렇게 하면 문자열이 바이트 배열로 변환되어 파일에 저장됩니다. 바이트 배열로 변환하는 이유는 파일 입출력 작업이 바이트 단위로 이루어지기 때문입니다.

결론
스트림은 데이터 소스와 목적지의 추상화, 데이터 처리의 효율성, 입출력 작업의 단순화, 다양한 데이터 형식 지원 등의 이유로 만들어진 개념입니다. 이를 통해 개발자는 다양한 데이터 소스와 목적지에 대해 일관된 방식으로 데이터를 처리할 수 있습니다.

'언어 및 도구들 공부 > Java' 카테고리의 다른 글

buffer 5  (0) 2024.09.28
buffer 4  (0) 2024.09.28
Stream, Java의 byte 타입 데이터와 1Byte  (0) 2024.09.28
JSON 구조와 Java 클래스 구조  (0) 2024.09.27
try-catch와 throw 구문  (0) 2024.09.27