topic★★★★★난이도 · 약 30분
SOLID 원칙
객체지향 설계의 5대 원칙 — SRP · OCP · LSP · ISP · DIP.
#설계#SOLID#객체지향
왜 배우는가
다형성과 묶여 서술형으로 출제된다. 각 원칙의 한 줄 정의를 정확히 암기하자.
은 Robert C. Martin이 정리한 객체지향 설계의 핵심 원칙 5가지다. 각 원칙은 독립적이지만 상호 보완적이며, 좋은 설계일수록 이 원칙들을 자연스럽게 지킨다.
| 약자 | 원칙 | 한 줄 정의 |
|---|---|---|
| S | Single Responsibility | 클래스는 하나의 책임(변경 이유)만 가져야 한다 |
| O | Open-Closed | 확장엔 열려 있고 변경엔 닫혀 있어야 한다 |
| L | Liskov Substitution | 자식 클래스는 부모를 완벽히 대체 가능해야 한다 |
| I | Interface Segregation | 클라이언트는 쓰지 않는 메서드에 의존하면 안 된다 |
| D | Dependency Inversion | 고수준은 저수준에 의존하지 말고, 둘 다 추상에 의존 |
OCP가 다형성의 이유다 — Shape[] 배열에 Circle, Square, Triangle을 담아 `area()`를 부르는 코드는 새 도형이 추가돼도 수정할 필요가 없다. 이것이 OCP이고, 이를 가능하게 하는 메커니즘이 다형성이다.
LSP 위반 예 — Rectangle을 상속한 Square가 `setWidth()`와 `setHeight()`를 동시에 변경한다면, 부모 Rectangle을 쓰는 코드에서 예상치 못한 동작이 발생한다. 'is-a' 관계만으로 상속하면 안 되고, '행위적 서브타입'이 되어야 한다.
아래 갤러리에서 5원칙 각각의 Before(위반) 와 After(준수) 코드를 직접 비교해 보자. 카드를 클릭하면 펼쳐진다.
카드를 클릭해 Before/After 코드와 의도를 펼치자. SOLID 5원칙 전체 수록.
실기 드릴 3문항
edit실기 드릴 · 단답형
SOLID 원칙 중 '확장에는 열려 있고 변경에는 닫혀 있어야 한다'에 해당하는 원칙의 영문 약자와 풀이를 쓰시오.
description실기 드릴 · 약술형
LSP(리스코프 치환 원칙)를 2줄로 설명하시오.
edit실기 드릴 · 단답형
'고수준 모듈은 저수준 모듈에 의존해선 안 되고, 둘 다 추상에 의존해야 한다'는 원칙은?