고수준 모듈은 저수준 모듈에 직접 의존해서는 안 됩니다. 둘 다 추상화(인터페이스)에 의존해야 합니다.
↻ 클릭해서 예시 보기
❌ 나쁜 예
classOrderService {
constructor() {
// 구체 클래스에 직접 의존!this.db = newMySQLDatabase();
}
// MySQL → PostgreSQL 변경 시 코드 수정 필요
}
✅ 좋은 예
classOrderService {
constructor(db: IDatabase) {
this.db = db; // 인터페이스에 의존
}
}
// new OrderService(new MySQL()) → OK// new OrderService(new Postgres()) → OK
03 — FUNCTIONAL PROGRAMMING
함수형 프로그래밍
함수형 프로그래밍(FP)은 부작용을 최소화하고 순수 함수의 합성으로 프로그램을 구성하는 패러다임입니다. 데이터의 불변성과 선언적 코드 스타일이 핵심입니다.
순수 함수: 같은 입력 → 항상 같은 출력, 외부 상태 변경 없음
❌ 부작용 함수✅ 순수 함수
❌ 부작용 (impure)
let total = 0;
functionaddToTotal(n) {
total += n; // 외부 변수 변경!return total;
}
addToTotal(5); // 5addToTotal(5); // 10 (달라짐!)addToTotal(5); // 15 (예측 불가)
✅ 순수 함수 (pure)
functionadd(a, b) {
return a + b; // 외부 상태 없음
}
add(10, 5); // 항상 15add(10, 5); // 항상 15add(10, 5); // 항상 15// 테스트하기 쉽고 예측 가능!
순수 함수의 조건: ① 동일 입력 → 동일 출력 (결정론적) ② 부작용 없음 (외부 상태 변경, 콘솔 출력, 네트워크 요청 등 없음) ③ 외부 변수에 의존하지 않음