인프런 김영한 강사님의 스프링 핵심 원리 - 기본 편을 보고 정리한 내용입니다.
객체 지향의 특징
추상화, 캡슐화, 상속, 다형성
4가지 있다.
객체 지향의 핵심은 다형성이다.
다형성
- 역할과 구현으로 세상을 구분한다.
자동차가 k3에서 테슬라로 변경되어도 운전자는 영향을 받지 않는다. (중요!)
왜 그런가?
자동차가 자동차의 역할(인터페이스)에 따라서 구현되었기 때문이다.
운전자는 자동차의 역할(인터페이스)만 알고 있고 의존한다.
운전자(클라이언트)는 자동차의 내부 구조를 몰라도 사용이 가능하다.
중요한 것은
새로운 자동차가 나와도 운전자(클라이언트)는 새로 배우지 않아도 된다.
역할과 구현으로 세상을 구분했지 때문이다.
역할과 구현 분리!!
역할과 구현으로 구분시 세상이 단순해지고, 유연하고 변경이 편리해진다.
장점
- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
자바언어의 관점에서 역할과 구현 분리
- 다형성을 활용
- 역할은 인터페이스
- 구현은 인터페이스를 구현한 클래스, 구현 객체
- 객체를 설계할 때 역할과 구현을 명확히 분리하여 설계
- 객체 설계 시 역할(인터페이스)을 먼저 부여하고, 역할을 수행하는 구현 객체를 만든다.
자바 언어의 다형성
오버라이딩을 통하여 다형성으로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있다.
오버라이딩을 통하여
interface인 MemberRepository의 save() 메서드를
MemoryMemberRepository의 save()와 JdbcMemberRepository의 save()로
유연하게 변경이 가능하다.
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 협력이라는 객체 사이의 관계에서 시작해야 한다.
- 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경 가능
파란색 원 MemberService가 클라이언트라고 했을 시
클라이언트를 변경하지 않아도 빨간 원 또는 녹색 원으로 변경이 가능하다.
이것이 다형성의 본질이다.
역할과 구현을 분리 정리
- 실세계의 역할과 구현 컨셉을 다형성을 통해 객체 세상으로 가져올 수 있음
- 유연하고 변경이 편함
- 확장이 가능한 설계
- 클라이언트에 영향을 주지 않는 변경 가능
- 인터페이스를 안정적으로 잘 설계하는 것이 중요!!
한계점
- 역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다.
예시) 자동차가 비행기로 변경되면 운전자도 그에 맞게 새로 배워야 함
스프링과 객체 지향
다형성이 가장 중요하다.
스프링은 다형성을 편리하게 사용할 수 있도록 도와준다.
'지난 글 모음' 카테고리의 다른 글
[프로그래머스] - LV1 신고 결과 받기 JavaScript (0) | 2022.01.22 |
---|---|
스프링 핵심 원리 - 기본편 3 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2021.05.14 |
스프링 핵심 원리 - 기본편 1 스프링이란? (0) | 2021.05.12 |
[Javascript] 객체란? 사용자 정의 객체 만들기 (1) | 2021.01.12 |
[react-native] FlatList로 배열 데이터 나타내기 (2) | 2020.11.22 |