객체 지향 특징
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러
개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지
를 주고받고, 데이터를 처리할 수 있다. (협력)
📌 다형성
예시)
![운전자와 자동차](https://velog.velcdn.com/images%2Fkureungkureung%2Fpost%2Fa0ba5332-46ea-4e0d-8181-784b0d40d77d%2Fbandicam%202021-12-25%2023-24-09-351.jpg)
✔ 역할과 구현을 분리 장점
- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
✔ 객체 협력
- 클라이언트 : 요청, 서버 : 응답
- 수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
![클라이언트와 서버](https://velog.velcdn.com/images%2Fkureungkureung%2Fpost%2F483f6803-681a-4a33-bb12-7d6ab6afb029%2Fbandicam%202021-12-25%2023-42-55-209.jpg)
✔ 인터페이스의 다형성
![인터페이스의 다형성](https://velog.velcdn.com/images%2Fkureungkureung%2Fpost%2F28f797a3-f08e-4550-9d5c-b566b8f6ce83%2Fbandicam%202021-12-25%2023-51-07-879.jpg)
✔ 다형성의 본질
- 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
✔ 역할과 구현 분리의 한계
- 역할(인터페이스) 자체가 변하면 클라이언트, 서버 모두에 큰 변경이 발생한다.
스프링과 객체 지향
- 다형성이 가장 중요하다.
- 스프링은 다형성을 극대화해서 이용할 수 있게 도와준다.
- 스프링에서 이야기하는 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.