백엔드/Spring
[스프링 핵심 원리] 섹션 1 객체 지향 설계와 스프링
까루카라
2023. 2. 28. 10:37
스프링 핵심 개념
- 자바 언어 기반 → 자바의 핵심 : 객체 지향
⇒ 좋은 객체 지향으로 어플리케이션을 개발하는 것.
객체 지향의 특징
- 유연하고, 변경에 용이하다.
- ex) 레고 블럭을 조립
- 컴포넌트를 쉽고 유연하게 변경하면서 개발하기
💡 다형성
역할과 구현으로 구분하기
ex) 자동차 역할과 k3, 아반떼 등의 구현으로 구분하기
→ 운전자는
1. 자동차의 내부구조를 몰라도 괜찮음
2. 자동차의 내부구조가 바뀌어도 괜찮음
- 역할 : interface
- 구현 : 클래스, 구현 객체
역할과 구현을 분리하다
- 클라이언트
- 역할만 알면 괜찮음
- 내부 구조를 몰라도 괜찮음
- 내부 구조가 변경되어도 영향을 받지 않음.
- 구현 대상이 바뀌어도 괜찮음
좋은 객체 지향의 5가지 원칙 (SOLID)
SRP (단일 책임 원칙)
- 기준은 변경이다.
- ⇒ 변경이 있을 때, 파급 효과가 적어야 함.
OCP (개방-폐쇄의 원칙)
- 확장에는 열려있고, 변경에는 닫혀있어야 함.
- 다형성을 생각해보자 : 구현체 변경을 위해서는 Client에서 코드를 변경해야 하기 때문에 다형성만으로는 OCP를 지키기 어렵다
LSP (리스코프 치환 법칙)
- 인터페이스의 규약은 지켜야 함.
- 기능적으로 보장해야
ex) 엑셀 밟으면 앞으로 가야 함.
ISP (인터페이스 분리 원칙)
- 운전(운전자 Client) & 정비(정비사 Client)를 구분
- ⇒ 명확하고 대체 가능성이 높아진다.
DIP (의존관계 역전 관계)
- 추상화에 의존해야지 구체화에 의존해서는 안된다. (역할에 의존해야 한다.)
- Client가 interface에 집중해야 한다.
💡 한편, 기존의 자바의 다형성은 구현체를 변경하기 위해서는 Client의 코드를 변경해야 한다.
→ OCP, DIP를 위반한다.
스프링을 통해 DIP/OCP를 충족시킬 수 있다.
- DI
- DI 컨테이너 제공