노트SOLID 원칙
SOLID Principles
설계#architecture · 연결된 개념 11개
쉽게 말하면
SOLID는 객체지향 코드를 고치기 쉽게 만드는 다섯 가지 원칙의 머리글자예요. 레고처럼 블록마다 맡은 일이 분명하고 규격이 맞으면, 하나를 바꿔 끼워도 나머지가 무너지지 않아요.
비유가 깨지는 곳 레고처럼 잘게 쪼갤수록 좋은 건 아니에요. 원칙은 목적이 아니라 변경 비용을 낮추는 수단이라, 작은 코드에 기계적으로 적용하면 추상화만 늘어나요.
객체지향 설계를 위한 다섯 가지 원칙의 머리글자. 로버트 C. 마틴(Robert C. Martin)이 정리했고 마이클 페더스(Michael Feathers)가 SOLID라는 약어를 붙였다.
- S, 단일 책임 원칙(Single Responsibility Principle, SRP): 모듈은 한 가지 이유로만 바뀌어야 한다. "한 가지 일"이 아니라 "바뀌는 이유"가 기준이다. 어기면 뒤엉킨 변경 냄새가 난다
- O, 개방-폐쇄 원칙(Open-Closed Principle, OCP): 확장에는 열려 있고 수정에는 닫혀 있어야 한다. 새 경우를 추가할 때 기존 코드를 고치지 않고 새 코드를 더하게 만든다. 전략 패턴, 조건부 로직을 다형성으로 바꾸기이 대표적인 수단이다
- L, 리스코프 치환 원칙(Liskov Substitution Principle, LSP) → 리스코프 치환 원칙
- I, 인터페이스 분리 원칙(Interface Segregation Principle, ISP): 클라이언트가 쓰지 않는 메서드에 의존하게 하지 않는다. 큰 인터페이스는 역할별로 쪼갠다. 컴포넌트에 쓰지도 않는 props를 잔뜩 넘기는 것도 같은 문제다
- D, 의존성 역전 원칙(Dependency Inversion Principle, DIP) → 의존성 역전 원칙
원칙은 목적이 아니라 변경 비용을 낮추는 수단이다. 작은 코드에 모든 원칙을 기계적으로 적용하면 추상화만 늘어난다(YAGNI, 구성요소 줄이기). React 컴포넌트에 적용한 예는 React로 보는 SOLID에 있다.
출처: Laws of Software Engineering: SOLID Principles
연결된 개념
이 노트를 가리키는 문서
뜻이 가까운 노트
- 심플 디자인
켄트 벡이 XP(Extreme Programming)에서 제시한 단순한 설계의 네 가지 규칙. 우선순위 순으로 ① 모든 테스트를 통과하고 ② 의도를 드러내고 ③ 중복이 없고 ④ 요소가 가장 적다. 마틴 파울러가 이렇게 정리한 형태가 널리 쓰인다.
- DRY 원칙
"모든 지식은 시스템 안에서 단일하고 명확하며 권위 있는 표현을 하나만 가져야 한다." 앤디 헌트와 데이브 토머스가 『실용주의 프로그래머』에서 정리한 원칙이다. 코드 줄의 반복만이 아니라 규칙·데이터·지식의 중복을 말한다.
- 집단 코드 소유
코드의 주인을 개인으로 두지 않고 팀 전체가 코드베이스 전체를 소유해, 누구나 필요한 곳을 고칠 수 있게 하는 XP 실천법.
- 디자인 패턴
반복해서 나타나는 설계 문제에 대한 검증된 해결 구조와 그 이름. 복사해 쓰는 완성 코드가 아니라 객체들이 협력하는 방식을 설명하는 어휘다. 1994년 이른바 GoF(Gang of Four, 네 명의 저자)의 책 『Design Patterns: Elements of Reusable Object-Oriented Software』가 23개 패턴을 정리하며 널리 퍼졌다.
- 선언형과 명령형 프로그래밍
명령형(Imperative)·절차적(Procedural) 프로그래밍은 결과에 도달하는 방법(how)을 단계별로 지시하고, 선언형 프로그래밍(Declarative Programming)은 원하는 결과(what)만 기술하고 과정은 도구에 맡긴다. 길 안내로 치면 "직진하다 두 번째 신호에서 우회전"이 명령형, "강남역 가 주세요"가 선언형이다.