-
[스프링핵심원리-기본편] 좋은 객체 지향 프로그래밍이란?히딘쓰의 책상/강의 2023. 8. 22. 17:15인강 들으며, 복습을 위한 요약 정리🎉객체 지향 특징
- 추상화
- 캡슐화
- 상속
- 다형성
객체 지향 프로그래밍
핵심 개념! 핵심 키워드가 중요함
- 객체들의 모임
- 객체끼리 메시지를 주고 받을 수 있고 데이터를 처리할 수 있는 것 (협력)
- 💡 유연하고 변경이 용이
- 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
- 궁극의 유연함과 궁극의 변경이 용이한 방법이 객체 지향의 핵심!
- 이게 바로 다형성 (Polymorphism)
다형성이 왜 중요할까?
다형성을 실세계에 비유!
- 💡 역할과 구현으로 세상을 구분
- 역할이 인터페이스, 구현이 인터페이스를 구현한 객체
다형성의 예시들
- 운전자 - 자동차
- 자동차라는 역할을 만들고 구현을 분리한 것은 결국 운전자(클라이언트)를 위해서 한 것
- 운전자(클라이언트)가 자동차 내부 구조 등은 몰라도 자동차의 역할(인터페이스)만 제대로 수행하면 클라이언트에게 영향을 주지 않음
- 어떤 자동차여도 자동차의 역할만 제대로 수행한다면 상관이 없음 (ex. 전기 자동차여도 자동차의 역할만 제대로 하면 됨) → 자동차 세상을 무한히 확장 가능함
- ⇒ 💡 클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있다는 것
- ⇒ 역할과 구현으로 세상을 구분했기 때문에 가능한 것
- → 여기서 진짜 중요한 것은 내가 자동차 역할을 여러 개 무한히 구현할 수 있는 게 아니고 새로운 자동차가 나와도 클라이언트는 새로운 걸 배우지 않아도 되는 것!
- → 💡 클라이언트를 바꿀 필요가 없음!!!!
- 연극
- 로미오 역할(클라이언트)과 줄리엣 역할(서버, 인터페이스)
- 줄리엣의 실제 배우(구현)가 바뀐다고 로미오 역할(클라이언트)에 영향을 주지 않음. 다른 대상 대체 가능. 로미오의 실제 배우(구현) 도 마찬가지!
- → 이게 바로 유연하고 변경이 용이 하다는 것
- 역할과 구현을 나눔으로써 변경 가능, 대체 가능성이 생김

출처 : 스프링 핵심원리-기본편 정리
역할과 구현을 분리함으로써 세상이 단순해지고, 유연해지며 변경도 편리해진다
- 장점
- 핵심은 클라이언트!
- 💡 클라이언트는 대상의 역할(인터페이스)만 알면 된다
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다
자바 언어에서도 역할과 구현을 분리하는 개념을 사용함
- 자바 언어의 다형성을 활용
- 역할 = 인터페이스
- 구현 = 인터페이스를 구현한 클래스, 구현 객체
- 객체를 설계할 때 역할과 구현을 명확히 분리
- 객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기
(참고) 꼭 인터페이스가 아니라 일반 상속 관계도 다형성이 가능
하지만 인터페이스는 다중 상속 가능, 일반 상속은 단일 상속만 가능 등의 여러 문제들이 있음
가급적이면 인터페이스로!
핵심은 구현보다 인터페이스(역할)이 더 먼저! 더 중요하다는 것!
💡 중요한 것은 클라이언트! (요청하는 사람)
다형성의 본질
- 💡 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있음
<역할과 구현을 분리>
- 정리
- 실세계의 역할과 구현이라는 편리한 컨셉을 다형성을 통해 객체 세상으로 가져올 수 있음
- 유연하고, 변경이 용이
- 확장 가능한 설계
- 클라이언트에 영향을 주지 않는 변경 가능
- 인터페이스를 안정적으로 잘 설계하는 것이 중요
인터페이스의 구현체를 무한 확장 할 수 있음여기서 제일 중요한 것은 인터페이스가 깨지면 다 끝난다는 것..!
→ 인터페이스를 안정적으로 잘 설계하는 것이 굉장히 중요함
→ 그럼에도 클라이언트에는 영향을 주지 않음!
<역할과 구현을 분리>
-
- 역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다
- 자동차를 비행기로 변경해야 한다면?
- 대본 자체가 변경된다면?
- USB 인터페이스가 변경된다면?
- 인터페이스를 안정적으로 잘 설계하는 것이 중요
자동차가 비행기로 바뀌면 인터페이스 자체가 변경되기 때문에 다 뜯어 고쳐야 함
연극에서 대본 자체가 변하면 그 대본을 보고 연기하는 모두가 영향을 받음
→ 설계할 때 인터페이스를 안정적으로 가장 변화 없는 방식으로 잘 설계하는 것이 중요!
API에서도 인터페이스 자체가 마니 안 흔들리게 잘 설계하는 게 진짜 잘하는 개발자!
자! 이제 스프링!
💡 객체 지향의 꽃은 다형성!
스프링 컨테이너가 제공하는 건 다형성을 편리하게 사용할 수 있도록 지원하는 기능
→ 스프링을 사용하면 레고 블럭 조립하듯이 구현을 편리하게 변경할 수 있음
스프링과 객체 지향의 설계에 대해서 제대로 이해하려면 다형성 외에 한가지를 더 알아야함
바로 SOLID (좋은 객체 지향 설계의 5가지 원칙)
ㅇ
'히딘쓰의 책상 > 강의' 카테고리의 다른 글
[스프링핵심원리-기본편] 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) 2023.08.24 스프링 핵심 원리 - 기본편 강의 시작! (0) 2023.08.07