Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL Mission #2 연습문제 풀이
#pragmatic
2년 전
587

💡 연습문제 23

"X 언어에는 파이프라인이 없는데요"에서 우리는 다음과 같은 코드를 썼다.

const content = File.read(file_name);

const lines = find_matching_lines(content, pattern);

const result = truncate_lines(lines);

많은 사람이 객체 지향 코드를 짤 때 메서드 호출을 연결해서 쓴다. 그래서 어쩌면 위 코드도 다음과 같이 바꾸고 싶을지도 모른다.

const result = content_of(file_name)

.find_matching_lines(pattern)

.truncate_lines();

두 가지 코드의 차이는 무엇인가? 여러분이 보기에 우리는 어느 쪽을 선호할 것 같은가?

✅ 풀이 과정

얼핏 보고선 방금까지 파이프라인 코드가 좋다고 말했으므로 아래 코드가 더 좋다고 생각하였지만, 잠시 더 생각해보니 뒤쪽의 코드는 많은 문제가 있었다.

두 코드의 실행 결과는 결과적으로 같다. 하지만 구현 방식은 약간 차이가 존재한다.

뒤쪽의 코드는 파이프라인의 코드라기 보다는 chain이 되어 있는 코드고, 이러한 코드는 앞에서 나온 디미터 법칙을 위배하여 열차 충돌을 일으키곤 한다.

쉽게 말해서 아래 코드는 각 constent_of 메서드의 return 객체는 find_matching_lines 메서드를 실행 할 수 있어야 하고, 마찬가지로 find_matching_lines 메서드의 반환 객체는 truncate_lines 메서드를 실행 할 수 있어야 한다. 위 코드는 자바스크립트인것 같은데 프로토타이핑으로 객체에 함수들을 직접 구현해 줘야하는데 이는 결합도를 높히게 되고 결국 함수 한곳을 수정하게 되면 다른곳으로 연쇄적으로 영향을 줄 수 있다. ETC를 지키기 위해서는 아래쪽의 연결된 코드 보다는 위쪽의 코드가 오히려 좋은 코드가 될 것이다.