SOLID in TypeScript

SOLID 타입 경계

SOLID는 클래스 이름을 나누는 규칙이 아니라 변경 이유, 확장 지점, 대체 가능성, 인터페이스 폭, 의존 방향을 코드 경계로 드러내는 설계 기준입니다.

01

변경 이유 분리

하나의 모듈이 정책 변경, 저장소 변경, UI 변경을 모두 담당하지 않게 합니다.

SRP
02

확장 지점 만들기

switch와 조건 분기가 늘어나는 곳은 전략 객체나 함수 주입으로 확장 가능성을 검토합니다.

OCP
03

대체 가능성 확인

하위 구현이 상위 계약의 전제와 결과를 깨뜨리지 않는지 테스트합니다.

LSP
04

인터페이스 축소

호출자가 쓰지 않는 메서드까지 구현하도록 강요하지 않습니다.

ISP
05

의존 방향 전환

상위 정책이 구체 저장소나 HTTP 클라이언트 구현에 직접 묶이지 않게 합니다.

DIP
Interface
소비자 중심 계약 거대한 공용 interface보다 사용처가 필요한 최소 형태를 정의합니다.
structural typing
Generic
반복 구조 일반화 타입 매개변수는 공통 규칙이 분명할 때만 도입합니다.
복잡도 리스크
Composition
상속보다 조합 기능을 작은 객체나 함수로 조합하면 대체와 테스트가 쉬워집니다.
상태 공유 점검

설계 품질 기준

추상화 이유 미래 가능성만으로 interface를 늘리기보다 실제 변경 압력을 근거로 삼습니다.
런타임 계약 TypeScript 타입이 맞아도 외부 입력은 런타임 검증이 필요합니다.
테스트 대체 구현을 mock이나 fake로 바꿔도 상위 정책 테스트가 유지되어야 합니다.