다형성(Polymorphism)
- 객체 지향에서 가장 중요한 개념
예시 1) 무대에서 공연을 하는 배우와 감독
특징 1 - 배우는 대체가 가능해야 한다.
=> 이상이 생긴 곳만 고치면 된다. 유연하다.
특징 2 - 배우는 상대배우가 바뀌어도 똑같이 연기를 하면 된다.
=> 다른 곳의 코드를 변경해도 다른 객체들은 변경할 필요가 없다. 변경에 용이하다.
예시 2) 운전자와 자동차
특징 1 - 운전자는 운전하는 법을 한 번만 배우면 같은 설계의 모든 차를 운전할 수 있다.
=> 클라이언트의 코드를 변경할 필요가 없음
특징 2 - 차는 종류가 달라져도 운전하는 법은 똑같아야 한다
=> 오버라이딩의 개념, 인터페이스에 구현된 것을 그대로 쓰되 틀 안에서 유연하게 변경 가능
역할과 구현의 분리
- 역할 = 인터페이스
- 구현 = 인터페이스를 구현한 클래스, 구현 객체
- 객체 설계 시 역할과 구현을 명확히 분리하자
- 역할(인터페이스)을 먼저 부여하고, 구현 객체 만들기
객체는 반드시 다른 객체와 협력 관계를 가진다.
협력관계를 인터페이스를 통해서 의존하게 하자.
클라이언트 -----(의존)----> 인터페이스 <= 서버에서 구현 객체를 자유롭게 끼워 넣을 수 있도록 함
- 인터페이스를 통해서 구현된 객체를 별도의 수정 없이 쉽게 갈아 끼울 수 있도록 설계
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 다형성의 본질은 객체가 서로 협력한다는 점에서 출발함
클라이언트를 변경하지 않고, 서버의 구현 기능을 마음대로 바꿀 수 있다.
결론
- 다형성을 통해 역할과 구현을 분리한다는 개념이 가능해짐
- 유연하고 변경에 용이하다
- 확장이 매우 쉽다. (확장할 구현 객체만 만들면 됨, 다른 코드를 변경할 필요가 없음)
- 이를 잘 활용하기 위해서는 인터페이스를 잘 설계해야 한다!
*한계점 - 인터페이스의 변화에 굉장히 취약하다*
=> 그래서 인터페이스가 바뀌지 않도록 잘 설계해야 함
이곳에 작성한 내용은 인프런에서 서비스하는 강의 중 김영한님의 스프링 강의를 정리하고 저의 언어로 기억하고 싶은 것을 정리한 내용입니다. 아래에 출처를 남겨두겠습니다.
https://www.inflearn.com/roadmaps/373
'CS 지식, 개념정리' 카테고리의 다른 글
객체 지향 프로그래밍(Object Oriented Programming)이란? (객체지향 키워드, 특징, 면접 질문) (0) | 2022.01.26 |
---|---|
DNS란 무엇인가? 도메인이란 무엇인가? (DNS, 도메인, 호스팅) (0) | 2021.12.27 |