▸JAVA/기본 문법

외부 데이터 입출력_io / nio / nio2 [1/3]

코데방 2019. 12. 16.
728x90

Java에서 프로그램과 외부의 데이터(디스크, 네트워크, 메모리 등)를 연결해서 조작할 수 있게 해주는 클래스가 너무 많습니다. 구버전과 신버전으로 나눌 수 있는데 아직까지 구버전도 많이 쓰이는데다가 각각 장단점이 있어서 둘 모두를 적절히 알고 사용해야할 것 같습니다.

 

먼저 구버전은 java.io 패키지입니다. 신버전은 Java SE-4에서 처음 나와(NIO) 7에서 한번 더 업그레이드 된(NIO2) java.nio라는 패키지입니다. 굳이 NIO1, NIO2로 나눠서 생각하지 않아도 됩니다. 그냥 (Old)IO와 (New)IO라고 생각하면 됩니다. 워낙 클래스도 많고 방대해서 중점적인 부분만 다루도록 하겠습니다. 전체적인 구조와 원리만 알면 상황에 따라 적절한 클래스를 찾아서 사용하면 됩니다.

 


 

[ IO와 NIO의 차이 ]

여러 특징이 있지만 간단히 정리하자면 IO는 스트림(Stream)이라는 단방향 통로를 생성해서 외부 데이터와 통신하고, NIO는 채널(Channel)이라는 양방향 통로를 생성해서 외부 데이터와 통신합니다. 즉 NIO는 IO와 달리 읽기/쓰기를 하나의 통로로 해결할 수 있습니다.

 

또한 기본적으로 입출력 시 버퍼(buffer)를 사용하여 속도가 빠릅니다. 하지만 이 점은 IO에서도 필터 스트림을 통해 사용할 수 있으므로 큰 차이는 아니라고 생각합니다. 물론 커널 버퍼를 직접 다룰 수 있도록 함으로써 속도를 높일 수 있는 기능이 있지만 장단점이 존재합니다. 이 부분은 다음글에서 조금 더 자세히 설명하겠습니다.

 

마지막으로 NIO의 가장 큰 특징으로 비동기 / non-blocking 방식을 지원한다는 점입니다. 이 부분 또한 다음 글에서 조금 더 자세히 설명하겠습니다.

 

요약하자면 자바 개발자들이 기존 java.io 패키지의 입출력 클래스들이 맘에 들지 않아 java.nio(new IO)라는 패키지를 새로 만들었습니다. 새로운 개념과 기능들이 잔뜩 들어가 있어서 성능은 좋아졌으나 사용하기가 까다로워졌고, 또 많은 기능 때문에 오히려 특정 상황에서는 기존 IO에 비해 성능이 떨어지기도 합니다.

 

다음 글부터 각자의 특징을 살펴보도록 하겠습니다.

 

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_java.io [2/3]

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_java.nio [3/3]

 

728x90

댓글

💲 추천 글