순간을 성실히, 화려함보단 꾸준함을

[리뷰] 13주차 : I/O 본문

백기선님과 함께 하는 자바 스터디

[리뷰] 13주차 : I/O

폭발토끼 2021. 7. 25. 20:09

왜 버퍼(Buffer)를 쓰면 빨라지는 걸까???

지난 포스팅에 버퍼(Buffer)에 관해 다루었지만 중요한 개념이라 좀 더 자세히 알아보도록 하자

왜 버퍼(Buffer)를 쓰면 빨라질까???우린 단순히 버퍼를 쓰면 입출력시 좀 더 빠르다는 것을 알 수 있다. 그리고 왜 빠른가 라고 물으면 한번에 모아서 보내기 때문에 빨라진다고 알고 있다. 그러나 이는 굉장히 위험한 생각이다.
왜냐면 단순히 버퍼라는 공간에 모아서 보내기 때문에 라는 이유로 입출력이 빨라지는 건 아니기 때문이다.

바로 시스템 콜(System Call) 의 횟수와 상관이 있기 때문이다.

버퍼를 사용하지 않을때는 키보드로 입력을 할때마다 시스템 콜의 동작이 발생한다.(시스템 콜이 무엇인지는 운영체제와 관련이 있는 내용이니 개인적으로 찾아보길 바란다)

바로 이 시스템 콜은 굉장한 시간을 차지한다.따라서 버퍼라는 공간에 모아서 보내게 된다면 매번 입력할때마다 발생하는 시스템 콜의 횟수를 줄여줄 수 있기 때문에 버퍼를 사용하면 빨라지게 되는 것 이다.

데코레이터 패턴(Decorator Patter)

데코레이터 패턴이란?

- 객체에 동적으로 새로운 책임을 추가한 패턴을 뜻한다. 즉, 전체적인 클래스에 새로운 기능을 추가할 필요성은 없지만, 개별적인 객체에 새로운 기능을 추가할 필요성이 생겨 기능을 구현해 줄때 이를 데코레이터 패턴이라고 한다.

private Reader in;

public BufferedReader(Reader in){
    this(in.defaultCharBufferSize);
}

java.io 패키지는 데코레이터 패턴으로 만들어져 있다.
위의 소스를 참고하면 BufferedReader는 Reader 의 하위 클래스 중 하나를 받아와서 생성자를 이용하여 버퍼를 이용한 기능을 제공한다.

좀 더 데코레이터 패턴에 대해 알아보고 싶으면 링크 참고바란다.

'백기선님과 함께 하는 자바 스터디' 카테고리의 다른 글

[리뷰] 14주차 : 제네릭  (0) 2021.07.31
14주차 과제: 제네릭  (0) 2021.07.31
13주차 과제: I/O  (0) 2021.07.21
[리뷰]12주차 : 애노테이션  (0) 2021.07.15
12주차 과제: 애노테이션  (0) 2021.07.12