PE Notes · SW
SOLID 설계 원칙
SRP·OCP·LSP·인터페이스 분리·DIP 다섯을 DRY·KISS·YAGNI와 짝 짓고, 전략·DI 패턴 연계와 과잉 추상 균형을 정리합니다.
클래스가 주문·메일·로그를 한몸에 지면 한 변경이 세 이유를 만듭니다. 는 객체 구조를 작게, 확장에 열고, 구현이 아니라 추상에 기대게 하는 다섯 원칙입니다. 남용하면 파일만 늘고 를 배신합니다.
SOLID 다섯
은 변경 이유를 하나로 둡니다. 응집을 올립니다. 는 확장에는 열고 수정에는 닫습니다. 새 결제 수단은 새 클래스이지 기존 switch 수정이 아닙니다. 효과는 유지보수·재사용·시험입니다.
은 하위 타입이 상위 계약을 깨지 않아야 합니다. 정사각형이 직사각형의 높이·너비를 따로 못 지키면 치환이 실패합니다. 는 쓰지도 않는 메서드에 의존하지 말라는 뜻입니다. 큰 인터페이스를 역할별로 쪼갭니다. 은 고수준이 저수준 구현을 직접 보지 않고, 둘 다 추상에 의존합니다. MySQL이든 문서 DB든 저장소 인터페이스만 보면 됩니다.
DRY, KISS, YAGNI
는 같은 지식을 한곳에만 둡니다. 복사하면 한쪽만 고칩니다. 성급한 공통 모듈은 잘못된 DRY가 되고, 그때는 잠시 중복이 낫습니다. KISS는 엔터프라이즈 패턴을 미리 깔지 말고 짧은 함수·분명한 이름으로 단순히 둡니다.
는 지금 필요 없는 기능을 구현하지 말라는 린 쪽 원칙입니다. 미래 분기·플러그인 포인트가 의 추측 일반화가 됩니다. 프로토타입은 KISS·YAGNI가 먼저이고, 오래 갈 제품은 SOLID·DRY의 비중이 커집니다.
패턴 연계와 균형
OCP는 전략 패턴과 잘 붙습니다. 알고리즘을 인터페이스 뒤로 갈아 끼웁니다. DIP의 실현은 입니다. 컨테이너가 구현을 밖에서 넣습니다. SRP는 파사드 뒤로 서브시스템을 나누는 것과 같이 갑니다. 책임이 섞인 신은 Extract Class의 대상입니다.
균형은 세 문장입니다. SOLID를 과하면 인디랙션만 늘고, 무조건 DRY는 잘못된 공통이 되며, 단계에 따라 우선순위가 바뀝니다. 답에 “항상 SOLID”보다 “지금 변경 이유와 확장 축”을 적습니다.
| 원칙 | 한 줄 | 깨지면 |
|---|---|---|
| SRP | 변경 이유 하나 | 산탄총 수정 |
| OCP | 확장 열고 수정 닫기 | switch 폭증 |
| LSP | 하위가 상위 계약 유지 | 깨진 다형성 |
| 인터페이스 분리 | 작은 역할 인터페이스 | 허위 구현 |
| DIP | 추상에 의존 | 저장소 교체 실패 |
답안은 다섯 이름과 한 줄 정의, DRY·KISS·YAGNI, 전략/DI 연계, 과잉 추상 경고를 한 장에 씁니다.