스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주
www.inflearn.com
다형성
역할과 구현
- 역할과 구현으로 세상을 구분
- 운전자 (운전을 하는 역할) - 자동차 (운전자를 일정 구역에 이동시키는 역할)
- 여기서 그랜저를 테슬라로 바꿔도 자동차 역할만 한다면 아무 문제 없음
- 그리고 운전자는 그냥 운전하는 역할만 충실하면 됨 - 클라이언트는 구현 대상의 내부 구조가 바뀌어도 영향 받지 않는다.
- 대상의 역할(인터페이스)만 알면 됨 - 역할과 구현을 프로그램 관점에서 보면 역할은 인터페이스, 구현은 인터페이스를 구현한 객체이다.
장점
- 역할과 구현을 구분함으로서 변경이 용이하고 확장성이 높다.
예시
- VIP는 할인을 한다는 정책이 있는데 클라이언트 측에서 얼마나 할인을 적용할 지 결정을 못했고 나중에 아예 할인을 안하는 경우가 있을 수 있다고 해보자
- 좋은 객체 지향 설계에서는 정책이 결정될 때까지 개발을 기다리는 게 아니라 역할과 구현을 나눴기 때문에 인터페이스(역할)와 임시 구현 객체(구현)을 만들어 놓고 최종 결정이 나면 구현을 시작해 인터페이스에 끼우기만 하면 된다. - 인터페이스를 안정적으로 잘 설계하는 것이 중요함
- 여기서 안정적이라는 건 이후에 변화가 없도록 설계한다는 의미
스프링에선?
- 스프링은 @bean 등록 @autowired 어노테이션을 통한 IOC, DI 기능들로 다형성을 극대화해서 이용할 수 있게 도와준다.
다형성이 가장 중요!
SOLID 법칙
SRP 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야한다.
개발을 하다보면 이 원칙이 깨지는 경우가 있지만 이를 잘 조절해 하나의 책임만을 가질 수 있게 노력해야함 - 변경이 있을 때 파급효과가 적으면 원칙을 잘 따른 것
OCP 개방-폐쇄 원칙
- 다형성 활용
- 소프트웨어 요소는 확장(다형성을 이용해 모듈 변경)은 자유롭게 하지만 변경(Service - 클라이언트 쪽 로직)은 없어야한다.
LSP 리스코프 치환 원칙
- 컴파일 성공을 넘어 인터페이스 규약을 다 지켜야함
예를 들어 자동차 인터페이스의 엑셀은 앞으로 가는 기능, 뒤로 가면 위반
ISP 인터페이스 분리 원칙
- 특정 클라이언트를 위한 범용 인터페이스 보단 기능을 분리해 여러 인터페이스를 만드는 게 좋다.
자동차 > 운전, 정비
사용자 > 운전자, 정비사
분리함으로써 얻는 장점 : 운전 관련 기능을 변경하고 싶으면 운전 인터페이스 변경, 정비 관련 기능 변경하고 싶으면 정비 인터페이스 변경으로 각각 다른 인터페이스를 변경하기 때문에 서로 영향을 주지 않는다.
DIP 의존관계 역전 원칙
- 클라이언트 클래스 (Service)는 인터페이스랑만 교류가 있어야함, 리파지토리의 상태는 몰라야한다.
즉 서비스와 리파지토리는 의존 관계가 있으면 안되고 리파지토리 인터페이스와 의존관계가 있어야함 - 각각의 역할을 철저하게 분리
'Java > Spring' 카테고리의 다른 글
OCP, DIP 위반 (0) | 2021.09.03 |
---|---|
단일 책임 원칙 예시 (0) | 2021.08.31 |
객체가 주입 & 객체 지향의 장점 (0) | 2021.08.25 |
자바 코드로 스프링 bean 직접 등록 (0) | 2021.08.23 |
컴포넌트 스캔과 자동 의존관계 설정 (0) | 2021.08.22 |