JAVA

자바 I/O 와 NIO 차이

EJUN 2022. 6. 14. 19:18

NIO란?


NIO는 NewInputOutput의 약자이며 기존에 있던 I/O의 새로운 버전이라고 생각하면 된다.

I/O와 NIO의 차이에 대해서 설명하기 전 가장 큰 차이는 버퍼의 유무입니다.

버퍼란? 쉽게 말해 임시적으로 사용하는 임시 저장 공간을 의미합니다. 

 

I/O vs NIO
  I/O NIO
입출력 방식 Stream Channel
버퍼 유무 X O
비동기 방식 X O

위의 표가 I/O와 NIO의 차이에 대해 정리한 표이다. 

근데 갑자기 비동기 방식에 대한 차이에 궁금한 독자들도 있을 것이다.

동기 vs 비동기

 

동기란?

쉽게 말해서 일의 순서가 있다는 것을 의미한다.

예를 들어 어떤 사용자가 누군가에게 문자를 전송했을 때 수신자에게 문자가 올 때 까지 발신자는 누구에게도 문자를

보내지 못하는 것과 비슷하다.

다시 말해, 수신자가 답장을 해주어야 발신자는 그때서야 문자를 보낼 수 있는 것이다.

이때 사용자 즉,발신자는 컴퓨터상에서 CPU라고도 할 수 있다.

 

비동기란?

동기와 비동기는 달리 일의 순서가 있지 않다. 이 말은 즉 스레드가 존재한다 라는 것을 의미한다.

예를 들어 사용자가 누군가에게 편지를 보낼 때 우편함에 편지를 넣고 사용자는 답장을 기다리지 않고 바로 다음 편지를 

작성할 수 있는 것을 의미한다. 

이때 사용자를 CPU라고 하면 비동기식을 사용하는 이유는 CPU가 대기하는 시간을 줄일려고 하는데 이유가 있다.

그럼 당연히 동시에 여러작업을 하는 비동기가 빠르다는 생각이 들겠지만 전체 시간은 더 걸린다!

 

 

 

다시 본론으로 돌아와서 NIO는 버퍼를 사용하기 때문에 버퍼를 사용하지 않는 I/O보다 더 빠르다.

또한 방식이 I/O는 Stream방식인데 NIO는 channel방식을 사용해서 스트림 없이도 파일을 읽고 쓸 수 있다.

 

Stream 방식
System

              ↓         ↑

File

위 처럼 Stream방식은 단방향으로 밖에 파일을 읽고 쓸 수 밖에 없다.

 

channel 방식
System

                    ↕

File

channel 방식은 위처럼 양방향으로 파일을 읽고 쓸 수 있다.

'JAVA' 카테고리의 다른 글

[JAVA] Primitive Type vs Reference Type  (0) 2023.03.21
Java의 역사  (0) 2023.03.12
Spring framework 핵심기술 - IoC 컨테이너  (0) 2023.01.05
I/O란?  (0) 2022.06.14
JAVA? 변수의 종류  (0) 2022.06.14