반응형
좋은 객체 지향 애플리케이션이란?
객체 지향 특징
- 추상화
- 캡슐화
- 상속
- 다형성
유연하고 변경이 용이한 객체 지향 프로그램?
- 부품을 갈아 끼우듯
- 레고 블럭을 조립하듯
- 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있다는 뜻
다형성이란?
- 프로그램을 역할과 구현으로 구분
- '운전자(역할) / 자동차(역할)'로 이해해보기
운전자 / 자동차
- 운전자는 자동차의 기본적인 기능을 숙지하고 운전을 하는 역할
- 자동차는 기본적으로 주행에 필요한 기능을 가지고 있음
- 자동차의 종류가 무수히 다양 BUT 자동차의 종류가 변해도 운전자는 동일하게 운전 가능
- K3, 아반떼, 그렌저와 같은 자동차의 종류는 자동차를 '구현'한 구현체
- 프로그래밍 관점에서 다시 정리해보면,
"운전자는 '자동차'의 인터페이스에 의존하고 있고,
인터페이스의 구현체(자동차의 종류)에는 의존하고 있지 않다. - 클라이언트는 인터페이스의 내부 구조, 즉 구현체를 몰라도 프로그램 사용이 가능
- 내부 구조를 변경하더라도(ex) 아반떼에서 그렌저로 차량 종류 변경)
인터페이스를 따르고 있다면(자동차 인터페이스) 동일하게 사용할 수 있다. - 이러한 방식은 클라이언트에 영향을 주지 않고 새로운 기능을 제공
- 이것이 가능한 것은 '역할'과 '구현'이 구분됐기 때문
공연 무대
- 또다른 예시로 공연 무대를 예로 들 수 있다.
- '로미오와 줄리엣' 공연을 상연할 때 로미오와 줄리엣이라는 '역할'이 존재
- 그 역할을 연기하는, 즉 역할을 '구현'하는 사람은 얼마든지 변경이 가능
- 연기를 하는 사람은 로미오와 줄리엣에 정의되어 있는 역할
즉, 역할의 인터페이스(연극의 경우 연기 방법, 대사)를 따르기만 하면 된다. - 공연을 관람하는 관람객이 클라이언트라고 했을 때,
클라이언트는 배우가 누구인지 몰라도 공연을 재밌게 관람할 수 있다.
정리하자면
- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
자바에서 다형성 활용 방법
- 역할과 구현을 구분하여 설계
- 역할 -> 인터페이스
- 구현 -> 인터페이스 구현 클래스
- 객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체를 만든다.
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
- 위 두 문장을 사람과 자동차에 비유해보자
- 사람(클라이언트)은 그린카와 쏘카와 같은 차량 렌트 서비스를 이용할 때
예약하는 시점(실행 시점)에 원하는 차량(구현 객체)을 선택할 수 있다. - 차량의 종류가 변해도 운전면허가 있다면 운전자는 변경하지 않아도 된다.
(클라이언트를 변경하지 않고 서버의 구현 기능을 변경)
출처 : 인프런 김영한님 스프링 강의
반응형
'내가 공부하려고 올리는 > 스프링' 카테고리의 다른 글
싱글톤 컨테이너 (0) | 2022.02.02 |
---|---|
스프링 컨테이너와 스프링 빈 (0) | 2022.02.02 |
관심사의 분리(IoC, DI 컨테이너) (0) | 2022.02.02 |
객체 지향 설계와 스프링 (0) | 2022.02.01 |
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.02.01 |
댓글