다형성 개념
다형성의 특징
- 유연하고 변경에 용이하다.
- 역할과 구현으로 세상을 구분한다.
자동차 예시

위의 그림은 다형성을 설명할때 가장 흔하게 등장하는 예시중 하나인 자동차 예시입니다.
자동차역할을 인터페이스라고 한다면 k3, 아반테, 테슬라 모델3는 각각 인터페이스(자동차 역할)의 구현체(자동차)라고 할 수 있습니다.
운전자는 차마다 별도의 운전법을 배울 필요 없이 여러종류의 차를 운전할 수 있다.
운전자는 각각의 차량이 아닌 자동차의 역할(운전)에 의존한다.
이것이 다형성의 핵심입니다.
운전자를 클라이언트라고 하고, 자동차를 서버라고 한다면
새로운 자동차(다른 서버)가 나왔다고 해서
운전자(클라이언트)가 면허를 다시 따야할 필요(클라이언트 수정)는 없습니다.
공연 예시

또 다른 예시인 공연 예시를 살펴보도록 하겠습니다
로미오와 줄리엣 공연을 한다고 했을때 로미오 역할, 줄리엣 역할을 누가 연기할 것인지는 중요하지 않습니다.
배우는 그저 자신이 연기할 역할만 제대로 이해하고 연기하면 된다.
공연을 하는것에 있어 상대 배우가 누구인지는 중요치 않다.
만약 자신의 상대배우가 변경되어도 공연은 정상적으로 진행될 것입니다.
이것이 유연하고 변경에 용이한 다형성의 예시입니다.
역할과 구현
위와 같이 단순한 예시를 통해서 다형성의 개념을 알아보았습니다.
운전자가 새로운 자동차가 나왔다고 해서 면허를 다시 딸 필요가 없고, 공연을 하는 배우가 상대역할의 배우가 누구인지
몰라도 자신의 역할만 잘 연기하면 되듯이 다형성은 역할(인터페이스)과 구현(구현객체)으로 구분되어있고,
그렇기에 유연하고 변경에 용이할 수 있습니다.
클라이언트의 관점에서의 다형성
- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
> 운전자는 각각의 자동차마다 새로운 운전법을 배울 필요가 없다. - 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
> 운전자는 차량의 내부의 구조를 알지 못해도 운전할 수 있다. - 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
> 엔진이 바뀌었다고 해서 운전법이 달라지지는 않는다. - 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
> 다른 자동차로 바꿔도 운전법은 동일하다.
자바 언어의 다형성

Java에서는 위와같이 다형성을 구현할 수 있습니다. 위의 자동차 예시를 빗대어 보자면
자동차의 역할 = MemberRepository(interface),
자동차 = MemoryMemberRepository,JdbcMemberRepository 입니다.
이와같이 Java에서는 interface와 그것의 구현객체를 통해 다형성을 구현할 수 있습니다.

클라이언트가 MemberRepository를 선택할때
MemoryMemberRepository, JdbcMemberRepository 둘중 어느것인지는 중요하지 않고,
MemberRepository라는 인터페이스를 구현한 구현객체이면 무엇이든 선택가능합니다.
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 다형성의 본질을 이해하려면 협력이라는 개체사이의 관계에서 시작해야 한다.
> 혼자 있는 객체는 없다.
> 수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다. - 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
출처: 스프링 기본(인프런 김영한)
'Back-end > Java' 카테고리의 다른 글
ThreadLocal를 이용한 로그 추적 (feat. 동시성 이슈) (0) | 2025.03.28 |
---|