Java

다형성 (Polymorphism)

Tommy__Kim 2023. 4. 5. 10:31

객체 지향의 특징으로 추상화, 캡술화, 상속, 다형성이 있습니다.

그 중 오늘은 다형성에 대해 살펴보도록 하겠습니다.

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 집단으로 보는 시각에서 벗어나 여러개의 독립된 단위, 객체들의 모임으로 파악하고자 하는 것입니다.

각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있습니다. 프로그램을 유연하고 변경이 용이하게 만들기 때문에

대규모 소프트웨어 개발에 많이 사용됩니다.

 

실제 세계와 객체지향이 1:1 로 정확히 매칭되지는 않지만 비유를 위해 비교해보겠습니다.

세상은 역할구현으로 구분을 할 수 있습니다.

 

자동차를 예로 들자면

위 그림에서 사람은 운전자 역할 이며 자동차는 자동차 역할 입니다.

전기차, 경유, 휘발유는 자동차 역할을 구현한 것입니다. 실 세계에서 운전 면허가 있으면 차의 종류와 관계없이 차를 운전할 수 있습니다.

이처럼 역할과 구현으로 구분하게 되면 보다 유연하고 변경이 쉽게 세상을 표현 할 수 있습니다.

역할과 구현을 분리함으로써 다음과 같은 장점을 가집니다.

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

예를 들어 Client가 Repository를 호출하는 상황을 가정하였을 때

만약 인터페이스를 사용하지 않는다면 Memory 기반 Repository에서 JDBC 기반 Repository로 갈아끼울 경우 관련된 코드를 모두 새로 갈아끼워줘야 합니다.

하지만 역할과 구현으로 구분한 덕에 Runtime 시점에 Repository만 갈아끼워주면 되므로 편리하게 코드 변경이 가능하다는 장점이 있습니다.

'Java' 카테고리의 다른 글

Javadoc 이란?  (0) 2023.04.22
Java EE 와 Java SE 뭐가 다른가요?  (0) 2023.04.21
==와 equals()는 어떠한 차이점을 가질까?  (0) 2023.04.21
final vs finally vs finalize  (0) 2023.04.18
좋은 객체 지향 설계의 5가지 원칙  (0) 2023.04.05