Spring
[Spring] 좋은 객체 지향이란?
Gray__
2021. 8. 5. 22:42
본 게시글은 인프런 강의 스프링 핵심 원리 - 기본편 '강의자료'를 정리한 게시글입니다.
게시글 내용의 출처는 모두 해당 강의에 있습니다.

객체 지향 특징
- 추상화
- 캡슐화
- 상속
- 다형성
=> 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만든다
유연하고, 변경에 용이?
- 레고 블럭 조립하듯이
- 키보드 마우스 부품 갈아 끼우듯이
- 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
- 역할과 구현으로 구분하는 것이 중요하다!
역할과 구현을 사물로 비유하기 위해 운전자-자동차 예시를 들어보자

운전자는 운전하는 방법만 알고 있으면, 자동차가 K3이건 아반떼이건 테슬라이건 구분하지 않고 운전할 수 있다.
역할과 구현 분리
역할과 구현으로 구분하면 단순해지고, 유연해지며 변경도 편리해진다.
- 클라이언트는 대상의 역할만 알면 된다 => 운전자는 자동차의 악셀, 브레이크의 역할만 알면 된다 !!
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다 => 운전자는 자동차의 내부 구조를 몰라도 된다 !!
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다 => 운전자는 자동차 구조에 영향 X
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다 => 운전자는 자동차에 따라 운전능력에 영향 X
자바 언어의 다형성 활용
- 역할 = Interface (인터페이스)
- 구현 = Class (인터페이스를 구현한 클래스)
- 객체를 설계할 때 역할과 구현을 명확히 분리
- 객체 설계시 역할(Interface)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기