구조적 프로그래밍
객체 지향 프로그래밍
함수형 프로그래밍
데이터(변수)와 프로세스(메소드)가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식.
좋은 설계:
function calculator(nums, option) {
let result = 0;
for (const num of nums) {
if (option === "add") result += num;
else if (option === "sub") result -= num;
}
return result;
}
위와 같은 계산기 함수가 정의되었을 때 곱하기와 나누기 연산을 추가하려면 else if 문이 늘어나게 된다. 즉, 코드의 변경이 일어나게 된다. 기존 코드를 변경하지 않고 새로운 기능을 얼마든지 추가할 수 있어야 한다.
function calculator(nums, callBackFunc) {
let result = 0;
for (const num of nums) {
result = callBackFunc(result, num);
}
return result;
}
const add = (a, b) => a + b;
const sub = (a, b) => a - b;
const mul = (a, b) => a * b;
const div = (a, b) => a / b;
console.log(calculator([2, 3, 5], add));
console.log(calculator([5, 2, 1], sub));
위처럼 두 번째 매개변수로 옵션을 받기보다 콜백함수를 받아서 콜백함수에 따라 연산이 달라지게 설정할 수 있다.