반응형
객체지향 설계의 5대 원칙이란 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)을 칭하며 각각의 앞자를 따서 SOILD 원칙이라고 부릅니다.
1. SRP 단일 책임 원칙(single responsibility principle)
- 하나의 클래스는 하나의 책임만 가져야 한다.
- 변경이 있을때 파급효과가 적으면 다일책임 원칙을 잘 따른것이다.(ex 객체의 생성과 사용을 분리)
- 응집도가 높고 결합도가 낮게 설계하라는 기본 원칙이다.
- 스프링에서는 객체의 생성을 IOC 컨테이너에서 주입받아 사용하여 구현객체를 생성하는 책임을 IOC 컨테이너에게 위임한다.
2. OCP 개방-폐쇄 원칙(Open/closed principle)
- 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다
- 다형성을 활용하여 인터페이스를 구현한 새로운 클래스를 만들어 새로운 기능을 만들어야 한다.
- ServiceImpl, JpaRepositoryImpl 등으로 구현체를 만들어 인터페이스에 끼워 쓰는건 OCP를 지키기 위함이다.
- DB 접근방식이 Mybatis로 변경되어도 MybatisRepositryImpl등으로 구현체를 변경시켜 사용이 가능해진다.
- Mybatis로 소프트웨어의 요소를 확장하여도 Repository와 Bean 영역만 바꿔줘도 되므로
- 실제 사용영역인 Service단의 변경은 닫혀있다.
3. LSP 리스코프 치환 원칙(Liskov substitution principle)
- 다형성에서 하위클래스는 인터페이스 규약을 다 지켜야 한다는 원칙이다.
- 단순히 인터페이스를 하위클래스에서 구현하여 컴파일 에러를 피하라는 것이 아니라
- 부모의 동작 규약을 지키라는 것이다.
- (save라는 동작을 할 시 디비연동을 어떤방식으로 하던지 insert into 쿼리를 실행해야한다.)
- (delete 쿼리를 실행하도록 해도 컴파일에는 문제가 없으나 LSP 리스코프 치환 원칙을 위배한 것)
4. ISP 인터페이스 분리 원칙(interface segregation principle)
- 범용 인터페이스 하나보다는 대체가능성을 생각해 필수기능이 잘 구현된 인터페이스 여러개를 설계하라
- 인터페이스가 명확해지고 대체 가능성이 높아진다.
5. DIP 의존관계 역전 원칙(Dependency inversion principle)
- 구현 클래스에 의존하지 말고 인터페이스에 의존하라는 뜻
- 변화하기 쉬운 구현객체에 의존하게 되면 추후 변경 및 유지보수가 힘들어진다.
- 서비스단에서 레파지토리의 인터페이스에만 의존하게된다면(생성과 주입은 IOC 컨테이너에서)
- 스프링을 통해 DIP 원칙을 지킬 수 있다.
반응형
'Spring' 카테고리의 다른 글
[java] Jsonparser, Gson 사용법 및 예제 (0) | 2021.03.05 |
---|---|
[spring] spring과 객체지향의 원리 (0) | 2021.02.28 |
[Jacoco] Jacoco 사용법 및 예제(maven) (0) | 2021.01.20 |
[Spring] 스프링 빈(Bean)이란? (0) | 2021.01.14 |
[Spring] 스프링 IOC(Inversion of Control)와 DI(Dependency Injection) (0) | 2021.01.14 |
댓글