CS 지식, 개념정리

객체 지향 프로그래밍의 다형성이란? (다형성의 본질, 역할과 구현, 구현 객체와 인터페이스)

권락현 2022. 1. 26. 01:21


다형성(Polymorphism)

  • 객체 지향에서 가장 중요한 개념
예시 1) 무대에서 공연을 하는 배우와 감독

특징 1 - 배우는 대체가 가능해야 한다.
=> 이상이 생긴 곳만 고치면 된다. 유연하다.
특징 2 - 배우는 상대배우가 바뀌어도 똑같이 연기를 하면 된다.
=> 다른 곳의 코드를 변경해도 다른 객체들은 변경할 필요가 없다. 변경에 용이하다.


예시 2) 운전자와 자동차

특징 1 - 운전자는 운전하는 법을 한 번만 배우면 같은 설계의 모든 차를 운전할 수 있다.
=> 클라이언트의 코드를 변경할 필요가 없음

특징 2 - 차는 종류가 달라져도 운전하는 법은 똑같아야 한다
=> 오버라이딩의 개념, 인터페이스에 구현된 것을 그대로 쓰되 틀 안에서 유연하게 변경 가능

 

 

역할과 구현의 분리

  • 역할 = 인터페이스
  • 구현 = 인터페이스를 구현한 클래스, 구현 객체
  • 객체 설계 시 역할과 구현을 명확히 분리하자
  • 역할(인터페이스)을 먼저 부여하고, 구현 객체 만들기
객체는 반드시 다른 객체와 협력 관계를 가진다.
협력관계를 인터페이스를 통해서 의존하게 하자.
클라이언트 -----(의존)----> 인터페이스 <= 서버에서 구현 객체를 자유롭게 끼워 넣을 수 있도록 함
- 인터페이스를 통해서 구현된 객체를 별도의 수정 없이 쉽게 갈아 끼울 수 있도록 설계

 

다형성의 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 다형성의 본질은 객체가 서로 협력한다는 점에서 출발함
클라이언트를 변경하지 않고, 서버의 구현 기능을 마음대로 바꿀 수 있다.

 


결론

  • 다형성을 통해 역할과 구현을 분리한다는 개념이 가능해짐
  • 유연하고 변경에 용이하다
  • 확장이 매우 쉽다. (확장할 구현 객체만 만들면 됨, 다른 코드를 변경할 필요가 없음)
  • 이를 잘 활용하기 위해서는 인터페이스를 잘 설계해야 한다!
*한계점 - 인터페이스의 변화에 굉장히 취약하다*
=> 그래서 인터페이스가 바뀌지 않도록 잘 설계해야 함

이곳에 작성한 내용은 인프런에서 서비스하는 강의 중 김영한님의 스프링 강의를 정리하고 저의 언어로 기억하고 싶은 것을 정리한 내용입니다. 아래에 출처를 남겨두겠습니다.

 

https://www.inflearn.com/roadmaps/373

 

[초급~중급] 우아한형제들 기술이사 김영한의 스프링 완전 정복 - 인프런 | 로드맵

대세를 따르세요! 자바 스프링 베스트셀러 우형 최연소 기술이사에게 배우는 스프링 완전 정복 🚩 [사진] 오픈 3개월 만에 수강생 7000+명의 극찬 릴레이 ✨원리와 실무를 한방에, 김영한의 스프

www.inflearn.com