클린 코드 책으로 유명한 베스트셀러이자 프로그래머인 로버트 마틴(Robert Cecil Martin)이 2000년도 초반에 SOLID 원칙에 대해서 논문을 통해 SOLID 원칙을 이야기 했으며, 이러한 개념을 SOLID 약어로 소개한 마이클 페더스로 인해서 구축되어졌다.
SOLID가 무엇인가❓
- Single Responsibility (단일 책임)
- Open/Closed (개방/폐쇄)
- Liskov Substitution (리스코프 치환)
- Interface Segregation (인터페이스 분리)
- Dependency Inversion (의존성 역전)
SRP (단일 책임의 원칙, Single-Responsibility Principle)
이름에서 알 수 있듯이 클래스가 하나의 책임을 가져야 하며 변경의 이유도 하나여야만 합니다.
단일 책임으로 인한 이점은?
- 더 적은 테스트 사례
- 기능이 적어져서 종속성이 적어지며, 낮은 결합성
- 작고 잘 조직된 클래스는 monolithic보다 쉬운 검색
OCP (개방-폐쇄의 원칙, Open-Close-Principle)
클래스는 확장에는 열려있어야 하며 수정은 닫혀 있어야 합니다.
기존에 코드의 수정은 버그 가능성이 있지만, 잠재적인 새로운 버그 발생을 방지하는 역할
기존의 코드를 건드리지 않고 클래스를 확장하여 사용
LSP (리스코프 치환 원칙, Liskov Substitution Principle)
자식클래스는 부모 클래스로써의 역할을 완벽히 할 수 있어야 합니다
좀 더 쉬운 이해를 위해 아래 그림같이 보도록 하겠습니다. 은행 애플리케이션에는 두 가지 계정 유형을 가지고 있습니다.
하지만 새로운 유형이 도입될 때마다 은행 서비스를 변경해야합니다.
이를 개선하기 위해 재설계를 하여 아래와 같이 수정을 하면, 확장에 대해서 열려있으면서 수정에 대해서는 닫혀 있는 구조가 됩니다.
은행 서비스는 더이상 구체적인 계정 클래스에 의존하지 않게 되어 새로운 유형이 도입되더라도 변경할 필요가 없게 됩니다.
좀 더 쉬운 이해를 위한 사이트
참고 사이트
참고 사이트
ISP (인터페이스 분리의 원칙, Interface Segregation Principle)
ISP는 더 큰 인터페이스를 더 작은 인터페이스로 분할해야 함을 의미합니다.
불필요한 인터페이스를 사용하려 상속받은 메서드를 퇴화시키거나 불필요한 빌드를 하게 됩니다.
DIP(의존성 역전의 원칙, Dependency Inversion Principle)
소프트웨어 모듈의 분리를 의미합니다. 이렇게 하면 하위 수준 모듈에 의존하는 상위 수준 모듈 대신 둘 다 추상화에 의존합니다
// 잘못된 선택
class macOSVentra {
let keyboard: Keyboard
let monitor: Monitor
init() {
monitor = Monitor()
keyboard = Keyboard()
}
}
// 의존성 역전의 원칙을 적용
class macOSVentra {
let keyboard: Keyboard
let monitor: Monitor
init(monitor: Monitor, keyboard: Keyboard) {
monitor = monitor
keyboard = keyboard
}
}
'Life style > TIL' 카테고리의 다른 글
30대의 공허 (0) | 2023.10.30 |
---|---|
[TIL] Memory Structure in Swift (Class, Struct) (0) | 2022.12.22 |
[TIL] Javascript 정규식표현, replace, substring (0) | 2022.05.09 |
[TIL] async / await (0) | 2022.02.28 |
[TIL] Todo 프론트 (3) | 2022.02.22 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!