아티클은 먼저 then
메서드의 개념을 ‘커링(currying)’과 유사한 방식으로 설명하며, 일련의 연산을 순차적으로 적용하는 과정을 예시로 제시합니다. 예를 들어, 문자열을 정수로 변환하고, 1을 더한 후, 세제곱하는 일련의 과정을 operation_1
과 operation_2_dense
와 같은 전통적인 함수 방식으로 구현한 후, then
메서드를 사용하여 어떻게 코드를 더 읽기 쉽게 만들 수 있는지 비교합니다. then
은 a.then { |i| i.to_i }.then { |i| i + 1 }.then { |i| i ** 3 }
와 같이 메서드 체인 형태로 각 단계를 명확히 분리하여 표현할 수 있게 합니다. 이는 각 단계의 입력과 출력을 시각적으로 명확하게 하여 코드의 흐름을 파악하기 쉽게 만듭니다.
더 나아가, add_one
이나 cube
와 같은 별도의 헬퍼 함수를 정의하여 then
체인 내에서 호출함으로써 코드의 모듈성을 높이고 구현 세부 사항을 숨길 수 있음을 보여줍니다. 이는 대규모 코드베이스에서 재사용성과 가독성을 극대화하는 데 기여합니다. 아티클은 학습의 중요성을 강조하며, 단순히 개념을 읽는 것을 넘어 실제 코드베이스에 적용해보는 것이 중요하다고 역설합니다.
또한, 37 Signals의 Writebook 예시에서 tap
메서드가 사용된 부분을 then
으로 개선하는 방법을 제시하며, 두 메서드의 차이점과 then
이 제공하는 또 다른 코드 스타일을 보여줍니다. tap
은 주로 중간 결과를 사용하여 부수 효과(side effect)를 발생시키거나 디버깅할 때 유용한 반면, then
은 값을 변환하고 다음 체인으로 전달하는 데 중점을 둡니다. Pagy 코드베이스의 next_cursor
메서드 예시를 통해 복잡한 데이터 변환 파이프라인을 then
을 사용하여 어떻게 더 명확하게 표현할 수 있는지도 시연합니다. 마지막으로, then
이 사실상 yield_self
메서드와 동일한 기능을 수행하는 별칭임을 언급하여 Ruby의 유연성을 다시 한번 강조합니다.