더북(TheBook)

그러나 파이프를 사용하면 data.txt 파일이 만들어지지 않는다. 이 차이는 커다란 영향을 미친다. 우리가 처리할 수 있는 입력 스트림과 출력 스트림의 크기 제한을 모두 없애기 때문이다(물론 데이터가 아주 많으면 처리하는 데 시간은 오래 걸릴 수 있다). 예를 들어 컴퓨터에 수십억 개의 숫자를 저장할 공간이 없을 때 예제에서 1000 대신 1000000000을 지정해 난수 십억 개를 생성한다고 가정해보자. randomseq.pystdio.writeln()을 호출할 때 스트림의 끝에 문자열이 추가되고, average.pystdio.readFloat()를 호출할 때 스트림의 시작 부분에서 문자열이 제거된다. 정확히 언제 이 함수들이 호출되는지는 운영 체제에 따라 다르다. randomseq.py가 어느 정도 출력한 후에 average.py를 실행해 출력된 스트림을 소비할 수도 있고, average.py가 입력 스트림 데이터가 필요해지면 randomseq.py가 어느 정도 출력하도록 실행할 수도 있다. 어느 방식으로 실행하든 결과는 같으며, 우리가 구현하는 프로그램은 그저 입력과 출력 스트림만 처리하면 되므로, 구체적으로 어떤 방식으로 스트림에 데이터가 생성되고 소비되는지에 대해서는 신경 쓸 필요 없다.

필터 원래 1970년대 초반 유닉스 시스템에서 제공하던 핵심 기능인 파이프는 개별 프로그램들이 쉽게 통신할 수 있게 해주므로 최신 운영 체제에서도 살아남았다. 오늘날까지 사용되고 있는 수많은 유닉스 프로그램들이 원래 프로그램의 개발자가 상상했던 것보다 수백만 배나 더 큰 파일도 처리하고 있다는 사실은 이 기능이 얼마나 막강한지 잘 보여준다. 함수를 호출해 다른 파이썬 프로그램과 통신할 수 있지만, 표준 입력과 표준 출력은 다른 시기에 다른 언어로 작성된 프로그램과도 통신할 수 있게 해준다. 표준 입력과 표준 출력을 사용하면 외부 세계와 쉽게 연결할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.