다형성 가이드: 같은 메시지에 다른 동작이 가능하다는 말의 의미
Dev

다형성 가이드: 같은 메시지에 다른 동작이 가능하다는 말의 의미


객체 지향을 설명할 때 다형성은 빠지지 않고 등장합니다. 하지만 입문 단계에서는 “오버라이딩” 정도로만 기억하고 넘어가기 쉽습니다. 실제로는 더 중요한 의미가 있습니다. 같은 요청을 보내도, 객체에 따라 적절한 방식으로 다르게 행동할 수 있게 만드는 구조입니다.

이 글에서는 아래 내용을 정리합니다.

  • 다형성이 무엇인지
  • 왜 중요한지
  • 조건문과 어떤 관계가 있는지
  • 입문자가 어떤 식으로 이해하면 좋은지

핵심은 다형성은 문법 기능보다, 변화하는 구현을 공통된 메시지 뒤에 숨겨서 확장과 변경을 더 쉽게 만드는 설계 도구라는 점입니다.

다형성이란 무엇인가

아주 단순하게 말하면:

  • 같은 메시지를 보내도
  • 객체에 따라 다른 방식으로 응답할 수 있는 것

입니다.

예를 들어 pay()라는 같은 요청을 보내더라도:

  • 카드 결제 객체
  • 계좌 이체 객체
  • 포인트 결제 객체

가 각각 다르게 동작할 수 있습니다.

왜 중요한가

다형성이 없으면 새로운 종류가 늘어날 때마다:

  • if/else
  • switch

같은 분기가 계속 커지기 쉽습니다.

반면 다형성을 잘 쓰면 공통된 메시지 뒤에 구현 차이를 숨길 수 있어서, 기존 호출 코드를 덜 흔들고 새로운 구현을 추가하기 쉬워집니다.

다형성과 상속은 같은가

상속은 다형성을 구현하는 한 방법일 수 있지만, 같은 개념은 아닙니다.

조합과 인터페이스 기반 구조에서도 다형성은 충분히 구현할 수 있습니다.

즉, 핵심은 “같은 요청에 다른 구현”이지, 반드시 상속을 쓰는 것이 아닙니다.

입문자는 어떻게 이해하면 좋을까

아래 질문이 도움이 됩니다.

  • 새로운 종류가 추가될 때 분기문이 계속 커지는가
  • 공통된 요청 형태 뒤에 구현 차이를 숨길 수 있는가
  • 호출자는 구체 타입을 얼마나 많이 알고 있는가

이 질문은 다형성이 왜 확장성과 연결되는지 잘 보여줍니다.

자주 하는 오해

1. 오버라이딩만 하면 다형성이다

문법적으로는 일부 맞지만, 설계적으로는 호출부가 정말 구체 구현에서 자유로운지가 중요합니다.

2. 다형성은 상속이 있어야만 가능하다

인터페이스와 조합 기반 구조에서도 충분히 가능합니다.

3. 다형성은 무조건 복잡하다

잘 쓰면 오히려 분기문을 줄이고 구조를 단순하게 만들 수 있습니다.

FAQ

Q. 다형성은 어디서 가장 효과를 보나

종류가 계속 늘어나는 기능이나 전략이 자주 바뀌는 구조에서 특히 좋습니다.

Q. if/else를 없애면 무조건 다형성이 좋은가

항상 그런 것은 아니지만, 반복되는 분기 구조라면 검토할 가치가 큽니다.

Q. 입문자는 무엇부터 연습하면 좋을까

새로운 유형이 생길 때 호출부를 덜 바꾸는 구조를 생각해보면 좋습니다.

먼저 읽어볼 가이드

검색 유입이 많은 핵심 글부터 이어서 보세요.