일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코딩테스트
- 후기
- EC2
- 성능테스트
- MySQL
- grafana
- java
- Flutter
- 자바
- 데이터구조
- 에프랩
- AWS
- 자바백엔드
- redis
- 알고리즘
- 로드밸런서
- 트러블슈팅
- github
- backend
- 플러터
- FLAB
- 도커
- Spring
- error
- F-Lab
- 부트캠프
- 백엔드
- 멘토링
- nGrinder
- 레디스
- Today
- Total
민스씨의 일취일장
YdMinS | 설계 원칙에 대해서 (SOLID, KISS, YAGNI, DRY, LoD) 본문
YdMinS | 설계 원칙에 대해서 (SOLID, KISS, YAGNI, DRY, LoD)
읻민스 2024. 7. 10. 16:55설계 원칙에 대해서 학습한 내용을 기억하기 위한 글입니다.
설계 원칙에 대해서
SOLID
SOLID는 객체 지향 설계를 위한 5가지 설계 원칙을 말한다.
S : 단일 책임 원칙
O : 개방 폐쇄 원칙
L : 리스코프 치환 원칙
I : 인터페이스 분리 원칙
D : 의존성 역전 원칙
Single Responsibility Principle 단일 책임 원칙
단일 책임 원칙은 하나의 모듈, 즉 클래스, 인터페이스, 메서드 등은 하나의 책임 또는 하나의 기능만을 가져야 한다는 원칙이다.
이 때, 하나의 모듈이 단일 책임을 갖고 있다는 판단은 해당 로직이 사용되는 시나리오 내에서 살펴봐야 한다.
Open-Closed Principle 개발 폐쇄 원칙
확장에는 열려있고 수정에는 닫혀 있어야 한다는 원칙이다.
SOLID 원칙 중 가장 이해하기도, 숙련되기도 어렵지만, 가장 유용한 원칙이다. 개방 폐쇄 원칙이 어려운 이유는 코드를 수정했을 때, 그 변경을 확장으로 봐야할지, 수정으로 봐야할지 구분하기 어렵기 때문이다. 그럼 개방 폐쇄 원칙의 이행 여부는 어떻게 판단 할 수 있을까? 이는 이행했는지 여부보다, 위반했는지를 생각해보는 것을 책[1]은 추천한다. "코드의 수정이 기존에 작성했던 코드와 단위 테스트를 깨뜨리지 않는 한, 개폐원칙을 위반하지 않았다고 할 수 있다."
Liskov-Substitution Principle 리스코프 치환 원칙
상위 클래스가 하위 클래스를 대체할 수 있어야 한다는 원칙이다.
리스코프 치환 원칙은 "계약에 따른 설계"라고 이해하면 좋다. 상위 클래스가 규정해 좋은 규칙을 하위 클래스는 따라야/따르면 된다.
Interface Segregation Principle 인터페이스 분이 원칙
클라이언트는 필요하지 않는 인터페이스를 사용하도록 강요되어선 안된다.
인터페이스는 클라이언트가 필요로 하는 기능들 중 관련된 메서드들로만 구성해, 불필요한 메서드들이 포함된 큰 인터페이스가 되지 않도록 해야 한다.
Dependency Inversion Principle 의존 역전 원칙
상위 모듈은 하위 모듈에 의존하면 안되고, 모든 모듈은 추상모듈에 의존해야 한다.
상위 모듈은 시스템의 핵심 기능을 담당하는 모듈로 주로 호출을 하며, 하위 모듈은 주로 수신하는 역할을 한다.
그 밖의 설계 원칙들
KISS
Kiss는 Keep It Simple, Stupid의 줄임말로 "설계는 단순하게 유지해야 한다"라는 원칙이다.
YAGNI
YAGNI는 You Aren't Gonna Need It의 줄임말로 "현재 사용하지 않는 기능을 미리 구현하지 않아야 한다"는 원칙이다.
DRY
DRY는 Don't Repeat Yourself는 "코드 중복을 피해야 한다"는 원칙이다.
LoD
LoD는 Law of Demeter로 "객체 간 결함도는 낮추고, 응집도는 높혀 시스템 복잡도를 줄여야 한다"는 원칙(법칙)이다.
다양한 설계 원칙을 공부하는 이유
정말 다양한 설계 원칙이 존재한다. 실제 이 모든 원칙을 다 지키기 위해서만 이 원칙들을 알아야 하는 건 아니고, 커뮤니케이션 코스트를 줄이기 위해 필요하기 때문이다.
참고자료
[1] 디자인 패턴의 아름다움
'Programming Language & Framework' 카테고리의 다른 글
YdMinS | 객체 지향 프로그래밍에 대해서 (0) | 2024.07.03 |
---|---|
IntelliJ | 코딩테스트 연습을 위해 자동완성 기능 켜기 (0) | 2024.05.24 |
TIssue | Angular | NG8002 : Can't bind to 'ngModel' since it isn't a known property of 'input' (0) | 2023.12.19 |
TIssue | AWS EC2 | SSH connection to host port 22 Operation timed out 해결방법 (0) | 2023.10.27 |
TIL | LogT | DDD | 도메인 주도 개발에 대해 알게된 내용과 고민들 (0) | 2023.04.11 |