🍎 Spring/김영한 스프링 핵심원리

[김영한 스프링 핵심원리 - 기본편] 1. 다형성

꾸씅이 2025. 1. 7. 19:45

이번 강의에서는 다형성의 개념과 간단한 예시가 설명되었다.

 

먼저 다형성의 개념에 대해 설명하겠다.

 

다형성

다형성은 객체지향 프로그래밍의 핵심 원칙 중 하나로, 하나의 인터페이스, 메서드 또는 클래스가 다양한 방법으로 동작하는 것을 의미한다.
동일한 인터페이스를 통해 서로 다른 작동 방식의 객체를 사용함으로써, 코드의 유연성과 재사용성이 높아진다.

 

좀 더 이해하기 쉽게 실세계에서의 비유를 들어보겠다. 

 

먼저 실세계를 역할구현으로 구분한다. 

 

 

위의 그림을 보면 운전자 역할과 자동차 역할을 확인할 수 있다.

 

자동차 역할은 k3, 아반떼, 테슬라 모델3와 같이 여러가지의 구현체를 통해 구현될 수 있다.

 

운전자는 자동차의 자세한 구현체에 대해 알 필요가 없고 단지 자동차가 자동차로써의 역할만 한다면 상관 없다.

 

이처럼 자동차의 역할이 여러가지의 구현체에 의해 구현될 수 있는 것을 다형성이라고 한다.

 

역할과 구현은 분리 되어야 한다. 

 

즉 클라이언트는 대상의 역할(인터페이스)만 알면 된다.

클라이언트는 구현 대상의 내부 구조를 몰라도 된다.

클라이언트는 구현 대상의 내부 구조가 변경 되어도 영향을 받지 않는다.

클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.

 

 

자바 언어에서는 오버라이딩이 다형성을 보여준다.

 

아래 예시 코드를 살펴보자.

 

public class MemberService { 
	private MemberRepository memberRepository = new MemoryMemberRepository();
    }

 

위에서 MemeberService는 memberRepository를 MemebrMemberRepository로 구현하고 있다.

 

public class MemberService { 
	// private MemberRepository memberRepository = new MemoryMemberRepository();
    private MemberRepository memberRepository = new JdbcMemberRepository();
    }

 

이번에는 JdbcMemebrRepository로 구현하고 있다.

 

위의 코드를 통해 다형성의 예시를 살펴 볼 수 있다. 

 

 

다형성의 본질

인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.

다형성의 본질을 이해하려면 협력이라는 객체 사이의 관계에서 시작해야한다.

클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다. 

 


🙏 이 포스트는 김영한 개발자님의 <스프링 핵심원리 - 기본편> 를 듣고 공부한 내용을 바탕으로 작성되었습니다.