모듈화: 서로 관련 있는 들이 잘 모아 놓는 것. 모듈성이 좋다면 해당 기능을 수정하려고 할 때 다른 것들은 이해하지 못해도 할 수 있게 만들어줌. 그리고 수정이 한 곳에서만 일어날 수 있음.
모든 함수는 컨텍스트 안에 존재하며, 대부분 특정 모듈에 속한다. 캡슐화를 위해 함수를 함수가 참조하는 곳이 많은 모듈로 옮겨주는 것이 좋다. 또한 호출자들의 현재 위치나 다음 업데이트 때 바뀌리라 예상되는 위치에 따라서도 함수를 옮겨야 할 수 있다.
// before
function trackSummary(points) {
const totalTime = calculateTime();
const totalDistance = calculateDistance();
const pace = totalTime / 60 / totalDistance;
return {
time: totalTime,
distance: totalDistance,
pace: pace
};
function calculateDistance() {
let result = 0;
for (let i = 1; i < points.length; i++) {
result += distance(points[i-1], points[i]);
}
return result;
}
function distance(p1, p2) { ... }
function radians(degrees) { ... }
function calculateTime() { ... }
}
// after
function trackSummary(points) {
const totalTime = calculateTime();
const pace = totalTime / 60 / totalDistance(points);
return {
time: totalTime,
distance: totalDistance(points),
pace: pace
};
}
function totalDistance(points) {
let result = 0;
for (let i = 1; i < points.length; i++) {
result += distance(points[i-1], points[i]);
}
return result;
}
function distance(p1, p2) { ... }
function radians(degrees) { ... }
function calculateTime() { ... }