내가 공부하려고 올리는/스프링

좋은 객체 지향 애플리케이션과 다형성

결딴력 2022. 2. 1. 17:25
반응형

좋은 객체 지향 애플리케이션이란?

 

 

객체 지향 특징

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

 

 

유연하고 변경이 용이한 객체 지향 프로그램?

  • 부품을 갈아 끼우듯
  • 레고 블럭을 조립하듯
  • 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있다는 뜻

 

 

다형성이란?

  • 프로그램을 역할과 구현으로 구분
  • '운전자(역할) / 자동차(역할)'로 이해해보기

 

 

 

운전자 / 자동차

운전자 / 자동차

  • 운전자는 자동차의 기본적인 기능을 숙지하고 운전을 하는 역할
  • 자동차는 기본적으로 주행에 필요한 기능을 가지고 있음
  • 자동차의 종류가 무수히 다양 BUT 자동차의 종류가 변해도 운전자는 동일하게 운전 가능
  • K3, 아반떼, 그렌저와 같은 자동차의 종류는 자동차를 '구현'한 구현체
  • 프로그래밍 관점에서 다시 정리해보면,

    "운전자는 '자동차'의 인터페이스에 의존하고 있고,
    인터페이스의 구현체(자동차의 종류)에는 의존하고 있지 않다.

  • 클라이언트는 인터페이스의 내부 구조, 즉 구현체를 몰라도 프로그램 사용이 가능
  • 내부 구조를 변경하더라도(ex) 아반떼에서 그렌저로 차량 종류 변경)
    인터페이스를 따르고 있다면(자동차 인터페이스) 동일하게 사용할 수 있다.
  • 이러한 방식은 클라이언트에 영향을 주지 않고 새로운 기능을 제공
  • 이것이 가능한 것은 '역할'과 '구현'이 구분됐기 때문

 

 

 

공연 무대

  • 또다른 예시로 공연 무대를 예로 들 수 있다.
  • '로미오와 줄리엣' 공연을 상연할 때 로미오와 줄리엣이라는 '역할'이 존재
  • 그 역할을 연기하는, 즉 역할을 '구현'하는 사람은 얼마든지 변경이 가능
  • 연기를 하는 사람은 로미오와 줄리엣에 정의되어 있는 역할
    즉, 역할의 인터페이스(연극의 경우 연기 방법, 대사)를 따르기만 하면 된다.
  • 공연을 관람하는 관람객이 클라이언트라고 했을 때, 
    클라이언트는 배우가 누구인지 몰라도 공연을 재밌게 관람할 수 있다.

 

 

정리하자면

  • 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
  • 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
  • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
  • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.

 

 

자바에서 다형성 활용 방법

  • 역할과 구현을 구분하여 설계
  • 역할 -> 인터페이스
  • 구현 -> 인터페이스 구현 클래스
  • 객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체를 만든다.

 

 

 

다형성의 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
  • 위 두 문장을 사람과 자동차에 비유해보자
  • 사람(클라이언트)은 그린카와 쏘카와 같은 차량 렌트 서비스를 이용할 때
    예약하는 시점(실행 시점)에 원하는 차량(구현 객체)을 선택할 수 있다.
  • 차량의 종류가 변해도 운전면허가 있다면 운전자는 변경하지 않아도 된다.
    (클라이언트를 변경하지 않고 서버의 구현 기능을 변경)

 

 

 

출처 : 인프런 김영한님 스프링 강의

 

 

반응형