•
보통 여러 가지 일을 수행하는 메소드는 책임이 여러 개로 맥락이 일정하지 않으므로 이해하기 어렵다.
•
따라서 한 번에 하나의 작업만 수행하게 코드를 구성해야 한다. 다시 말해서 이번 장은 탈파편화하는 방법을 다룬다. 즉 파편으로 나눠진 코드의 조각들을 책임이나 맥락에 따라 같이 있게하는 것이다.
•
코드가 한 번에 한 가지 일만 하게 하는 절차는 다음과 같다.
1.
코드가 수행하는 모든 작업을 나열한다. 작업은 아주 작은 단위일수도 모호한 일일 수도 있다.
2.
이러한 작업을 분리하여 서로 다른 함수로 혹은 적어도 논리적으로 구분되는 영역에 놓을 수 있는 코드로 만들어라.
작업은 작을 수 있다
•
보통 메소드 단위로 정의해둔 작업은 하나만 수행하는 것처럼 보이지만 작게 표현될 수 있다. 그런 부분들을 찾아서 분리해두자.
객체에서 값 추출하기
•
탈파편화되어 있는 코드는 확장 시 가독성을 해칠 우려가 있다. 물론 그 자체로도 가독성이 좋은 편은 아니다.
◦
A → B → C → A와 같은 흐름대신 A → A → B → C를 유지하라는 것이다.
•
유사한 관심사를 가지고 있는 코드들은 모아두는 것이 가독성에 좋다.
요약
•
이 장은 코드를 조직화하는 간단한 테크닉인 한 번에 하나의 일만 수행하게 만드는 방법을 논의했다.
•
우리가 작성한 코드를 읽기 어렵다면 일단 수행하는 작업을 모두 나열하라.
•
나열된 작업 중 일부는 별도의 함수나 클래스로 쉽사리 분리할 수 있다.
•
다른 작업은 원래 함수 내에서 별도의 메소드로 추출할 수 있다.
◦
어떻게 정확히 분리할까는 크게 중요하지 않다. 어차피 어려운 일이므로 일단 분리하는 것부터 시작해보자.