| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- docker compose
- securitycontextholderfilter
- 지연 로딩
- JWT
- @Transactional
- CORS
- Web
- Spring Container
- Dead Letter Queue
- @ComponentScan
- DI
- MSA
- 서블릿 컨테이너
- docker
- kafka
- Routing Key
- DLQ
- dockerhub
- mybatis
- Spring
- redis
- 스프링 부트
- JdbcTemplate
- JPA
- AWS
- 컨테이너
- JPQL
- 페이징
- 쿠버네티스
- Spring Data JPA
- Today
- Total
look-forest
좋은 객체 지향 프로그래밍? 본문
스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크라고 하였다.
그 강력한 특징이 뭔지부터 알아보자.
객체 지향의 특징
- 객체지향 프로그래밍은 프로그램을 유연하고 변경에 용이하게 만드므로 대규모 소프트웨어 개발에 많이 사용된다.
- 세상을 '객체'들의 상호작용으로 파악하고자 하는 것. 각각의 객체는 메시지를 주고받고, 데이터를 처리한다.
'유연하고 변경에 용이' 하다의 의미
레고 블록 조립하듯이, 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
→ 다형성(Polymorphism): 여러 가지 형태를 가질 수 있는 능력

다형성을 만들어내기 위해: 역할과 구현으로 세상을 구분하자

자동차가 바뀌어도 운전자에게 영향을 미치지는 않는다! 자동차의 인터페이스는 동일하니까!
클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있다!
역할(인터페이스)과 구현(클래스, 구현 객체)으로 세상을 구분하면 유연해지고 변경도 편리해진다(확장성)
객체 간의 상호 작용
혼자 있는 객체는 없다.
수많은 객체 클라이언트(요청)와 객체 서버(응답) 관계를 가진다.

그 관계의 대상이 얼마든지 변경될 수 있다.
다형성의 본질
인터페이스의 구현체를 실행 시점에 유연하게 변경할 수 있다!
사용처 코드를 변경하지 않고, 구현 기능을 유연하게 변경할 수 있다!
좋은 객체 지향 설계
배역만 만들어두고, 배우는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계
- 역할과 구현을 분리하면 자유롭게 구현 객체를 조립할 수 있다 ← 다형성
스프링 컨테이너는 다형성을 극대화해서 이용할 수 있게 도와준다
제어의 역전(IoC), 의존관계 주입(DI) 이라는 방법을 통해 역할과 구현을 편리하게 다룰 수 있도록 지원
→ 스프링을 사용하면 레고 블록 조립하듯이 구현을 편리하게 변경할 수 있다!
참고 자료 & 이미지 출처
스프링 핵심 원리(김영한 님)
'Spring > Spring 핵심 원리' 카테고리의 다른 글
| [예제] SPRING으로 전환하기 (0) | 2023.04.29 |
|---|---|
| IoC/DI 컨테이너 (0) | 2023.04.29 |
| [예제] 스프링 없이 좋은 객체 지향 설계하기 (0) | 2023.04.29 |
| SOLID: 좋은 객체 지향 설계 5원칙 (0) | 2023.04.29 |
| Spring이란? (0) | 2023.04.29 |