5장 구부러지거나 부러지거나 - 연습문제 23
<aside> ❓ 연습 문제 23 | “X 언어에는 파이프라인이 없는데요” 에서 우리는 다음과 같은 코드를 썼다.
//1번 코드
const content = File.read( file_name );
const lines = find_matching_lines( content, pattern );
const result = truncate_lines ( lines );
많은 사람들이 객체 지향 코드를 짤 때 메서드 호출을 연결해서 쓴다. 그래서 어쩌면 위 코드도 다음과 같이 바꾸고 싶을지도 모른다.
//2번 코드
const result = content_of( file_name )
.find_matching_lines( pattern )
.truncate_lines();
</aside>
일단 파이프 라인이라는 개념은 책에서 나온 내용에서 |> 이런 모양의 기호로 왼쪽에 있는 값을 가져다 오른쪽에 있는 함수의 첫 번째 인자로 넣는 다라는 의미
기본 개념은 결국 인자를 다음 함수에 넘기는 입력 → 출력 → 입력 →출력 ... 으로 단계별로 만들어 결합도를 줄이기 위한 의도인 것이다.
그렇지만, 2번 코드는 결과값을 도출하기까지 중간 과정이 객체에 있는 함수로 매우 밀접하게 결합되어있다. ( 풀이에서는 객체가 우리 코드와 결합되어 있다고 표현함. )
//1번 코드
const content = File.read( file_name ); // 파일의 내용을 변수에 담는다.
const lines = find_matching_lines( content, pattern ); // 파일의 내용과 일정 패턴일치한 줄을 찾는다.
const result = truncate_lines ( lines ); // 그 줄들을 연결한다.
// 흐름이 단계별로 끊어져있어서 연결고리를 해제하는데 부담이 없다.
//2번 코드
const result = content_of( file_name ) // 파일명인 인자로 내용을 확인하고 ->
.find_matching_lines( pattern ) // 어떤 패턴이 일치하는 줄을 찾아서 ->
.truncate_lines(); // 라인들을 연결한다..
// 연결 - 연결 - 연결 중간에 끊을수 없는 연결고리들..
1번 코드 처럼 단계별로 코드를 구현하였기 때문에 변동사항이 있는 경우 코드를 수정하기가 더 쉬워진다. 예를 들어 예외가 되는 줄 ( 주석처리가 들어간 줄을 탐색한다. ) 라는 로직이 추가 되었을때 단계별로 짜여진 1번 코드는 파일의 내용을 변수로 담은 데이터를 주석이 없는 데이터로 변환하면 된다. 즉
//1번 코드
const content = File.read( file_name ); // 파일의 내용을 변수에 담는다.
// 이부분에서 주석을 제외 시킨 내용을 추가한다.
const except_comment_content = remove_comment( content ); // 파일의 내용을 변수에 담는다.
const lines = find_matching_lines( except_comment_content , pattern ); // 파일의 내용과 일정 패턴일치한 줄을 찾는다.
const result = truncate_lines ( lines ); // 그 줄들을 연결한다.
// 흐름이 단계별로 끊어져있어서 연결고리를 해제하는데 부담이 없다.