좋은 객체 지향 설계의 5가지 원칙 (SOLID)
SRP - 단일 책임 원칙
한 클래스는 하나의 책임만 가져야 한다. UI 변경, 객체의 생성과 사용을 분리
OCP - 개방-폐쇄 원칙
확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용, 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현, 이를 하기 위해서는 DI가 필요
LSP - 리스코프 치환 원칙
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. (자동차 인터페이스의 엑셀은 앞으로 가라는 기능이다. 뒤로 가게 구현하면 LSP를 위반한 것이다.)
ISP - 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
DIP - 의존관계 역전 원칙
프로그래머는 추상화에 의존해야지, 구현에 의존하면 안 된다. 구현 클래스에 의존하지 말고 인터페이스에 의존해야 한다 라는뜻.
(연기자가 연기를 하는데 특정 배우와만 연기할 수 있다는 것은 말이 안 됨. 대본(인터페이스)만 있으면 어느 연기자와도 연기(기능)가 가능해야 함.)
자바 기본 특징으로는
- 추상화
- 캡슐화
- 상속성
- 다형성
4가지가 있다. 그 중 다형성이 가장 중요하다.
다형성
자동차라는 객체가 있고 그 하위 자식으로 현대차, 테슬라, 벤츠 가 있다고 할 때,
사용자는 어떤 자동차인지 관계없이 운전을 할 수 있다.
사용자는 인터페이스만 알면 되고, 구현부는 알 필요가 없기 때문.
→ 역할(인터페이스)이 구현(클래스, 객체) 보다 중요하다.
인터페이스가 변경되지 않도록 잘 설계하는 게 중요하다.
제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
스프링을 사용하면 마치 레고 블록 조립하듯이 공연 무대의 배우를 선택하듯이 구현을 편리하게 변경할 수 있다.
실무 고민
- 인터페이스를 도입하면 추상화라는 비용이 발생한다
- 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링 해서 인터페이스를 도입하는 것도 방법이다.
객체지향 책 추천 : 객체지향의 사실과 오해
스프링 책 추천 : 토비의 스프링 (필수 책)
JPA 책 추천 : 자바 ORM 표준 JPA 프로그래밍 (저자 김영한)
관심사 분리 - https://mildwpaper.tistory.com/22
출처 - https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard
'Web' 카테고리의 다른 글
| JPA N+1 문제 (0) | 2022.03.16 |
|---|---|
| 관심사의 분리 (0) | 2022.03.13 |
| JPA 기본키 생성 전략 (0) | 2021.10.31 |
| 아파치와 톰캣의 차이 (0) | 2020.11.01 |
| HttpServletRequst와 HttpServletResponse (0) | 2020.11.01 |