-
SOLID 객체 지향 설계 5원칙Spring Boot/스프링부트 공부 2022. 1. 3. 09:37
객체 지향 설계 5원칙?
스프링부트를 공부하면서 자주 언급되는 말이 있어 정리해본다.
목차
1) 객체 지향 설계 5원칙이란?
2) SOLID
객체 지향 설계 5원칙이란?
결론 : 객체 지향 프로그램을 올바르게 설계하는 원칙
- 결합도는 낮추고, 응집도는 높인다" 관점을 재정립
- 제품이 아닌 개념이다. 속성 메서드, 클래스, 객체, 모듈, 라이브러리 등등 전반에 녹아 있음.
- 이 원칙이 녹아있으면 유지보수/리펙토링이 수월해짐
- 디자인패턴의 뼈대, 스프링의 근간이 되는 개념
SOLID
결론 :객체 지향이 처음 등장한 1960년 이래로 시행착오를 통해 탄생한 5개의 설계 원칙이 있다. AKA, SOLID.
- SRP 단일 책임 원칙 Single Responsibility Principle
- OCP 개방 폐쇄 원칙 Open Closed Principle
- LSP 리스코브 치환 원칙 Liskov Substitution Principle
- ISP 인터페이스 분리 원칙 Interface Segregation Principle
- DIP 의존 역전 원칙 Dependency Inversion Principle
1) 단일 책임 원칙
결론 : "모델링 과정에서 단일 책임 원칙을 상기하며 추상화를 하자!"
- 향기나는 코드, 역할을 분리한 코드
- 나 === 남자친구 역할, 아들 역할, 사원 역할, 친구 역할 (X)
- 클래스로 역할 분류할 것. 남자친구 - 남자친구역할 아들- 아들역할...
- 속성이 변하면 냄새나는 코드다. (분기문이 많으면 의심)
2) 개방 폐쇄 원칙
결론 : "확장에 대해서는 열고, 변경에는 닫아라"
- 2종 차량을 몰다가 1종 차량을 몰면 운전 습관을 하나하나 다 바꿔야하는 걸까?
- 자바에서는 2종 차량, 1종차량 위에 차량 인터페이스를 만들면 다양한 자동차가 추가되도 문제 없다.
- 편의점 업무를 "판매" 인터페이스를 만들고 직원들을 만들어 쓰면 오메야 확장성
- 스프링에는 JDBC를 사용하면 오라클 -> MySQL로 바꾸더라도 수정이 필요 없는 부분이 대표적인 개방 폐쇄 적용 예
3) 리스코브 치환 원칙
결론 : "하위 객체는 상위 객체 인척 할 수 있어야한다"
- 하위 클래스 is a kind of 상위 클래스
- 구현 클래스 is able to 인터페이스
4) 인터페이스 분리 원칙
결론 : "단일 책임 원칙을 다른 방법으로 해결"
- 클래스에 역할을 인터페이스로 분리하여여 사용하는 것
- 인터페이스는 최소화, 상속은 최대화하는 것이 좋다,
- 특별한 경우가 아니면 단일 책임 원칙을 우선하자
5) 의존 역전 원칙
결론 : "자기 보다 변하기 쉬운 것에 의존하지 말자"
- ex) 수년을 타는 자동차 -> 스노우타이어 관계는 자동차가 타이어에 의존하는 관계이다.
- 타이어는 계절에 따라, 마모에 따라 자주 바꿔주어야해서 안 좋은 관계다.
- 타이어 인터페이스를 만들어주고, 타이어 인터페이스에 의존하는 스노우 타이어를 만들어 쓰면?
- 의존 안하면 스노우타이어가 의존하게 되서 의존 역전이라 한다.
- 인터페이스로 인해 얼마나 유지 보수가 쉬워지고 확장이 편해진건지 생각해 보면..?
마무리
객체 지향을 좀더 올바르게 사용할 수 있도록 고안된 법칙이다. 즉, 결합도는 낮고 응집도는 높은 프로그램을 만들어서 유지보수는 쉽고 확장성은 좋게 만드는 방법.
출처 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해 [김종민 지음]
반응형'Spring Boot > 스프링부트 공부' 카테고리의 다른 글
Spring MVC란? (0) 2022.02.19