객체 지향을 설명할 때 다형성은 빠지지 않고 등장합니다. 하지만 입문 단계에서는 “오버라이딩” 정도로만 기억하고 넘어가기 쉽습니다. 실제로는 더 중요한 의미가 있습니다. 같은 요청을 보내도, 객체에 따라 적절한 방식으로 다르게 행동할 수 있게 만드는 구조입니다.
이 글에서는 아래 내용을 정리합니다.
- 다형성이 무엇인지
- 왜 중요한지
- 조건문과 어떤 관계가 있는지
- 입문자가 어떤 식으로 이해하면 좋은지
핵심은 다형성은 문법 기능보다, 변화하는 구현을 공통된 메시지 뒤에 숨겨서 확장과 변경을 더 쉽게 만드는 설계 도구라는 점입니다.
다형성이란 무엇인가
아주 단순하게 말하면:
- 같은 메시지를 보내도
- 객체에 따라 다른 방식으로 응답할 수 있는 것
입니다.
예를 들어 pay()라는 같은 요청을 보내더라도:
- 카드 결제 객체
- 계좌 이체 객체
- 포인트 결제 객체
가 각각 다르게 동작할 수 있습니다.
왜 중요한가
다형성이 없으면 새로운 종류가 늘어날 때마다:
- if/else
- switch
같은 분기가 계속 커지기 쉽습니다.
반면 다형성을 잘 쓰면 공통된 메시지 뒤에 구현 차이를 숨길 수 있어서, 기존 호출 코드를 덜 흔들고 새로운 구현을 추가하기 쉬워집니다.
다형성과 상속은 같은가
상속은 다형성을 구현하는 한 방법일 수 있지만, 같은 개념은 아닙니다.
조합과 인터페이스 기반 구조에서도 다형성은 충분히 구현할 수 있습니다.
즉, 핵심은 “같은 요청에 다른 구현”이지, 반드시 상속을 쓰는 것이 아닙니다.
입문자는 어떻게 이해하면 좋을까
아래 질문이 도움이 됩니다.
- 새로운 종류가 추가될 때 분기문이 계속 커지는가
- 공통된 요청 형태 뒤에 구현 차이를 숨길 수 있는가
- 호출자는 구체 타입을 얼마나 많이 알고 있는가
이 질문은 다형성이 왜 확장성과 연결되는지 잘 보여줍니다.
자주 하는 오해
1. 오버라이딩만 하면 다형성이다
문법적으로는 일부 맞지만, 설계적으로는 호출부가 정말 구체 구현에서 자유로운지가 중요합니다.
2. 다형성은 상속이 있어야만 가능하다
인터페이스와 조합 기반 구조에서도 충분히 가능합니다.
3. 다형성은 무조건 복잡하다
잘 쓰면 오히려 분기문을 줄이고 구조를 단순하게 만들 수 있습니다.
FAQ
Q. 다형성은 어디서 가장 효과를 보나
종류가 계속 늘어나는 기능이나 전략이 자주 바뀌는 구조에서 특히 좋습니다.
Q. if/else를 없애면 무조건 다형성이 좋은가
항상 그런 것은 아니지만, 반복되는 분기 구조라면 검토할 가치가 큽니다.
Q. 입문자는 무엇부터 연습하면 좋을까
새로운 유형이 생길 때 호출부를 덜 바꾸는 구조를 생각해보면 좋습니다.
Read Next
- 확장 구조 관점은 OCP 가이드와 잘 이어집니다.
- 상속과 조합 차이는 상속 vs 조합 가이드도 함께 보면 좋습니다.
심사 대기 중에는 광고 대신 관련 가이드를 먼저 보여줍니다.
먼저 읽어볼 가이드
검색 유입이 많은 핵심 글부터 이어서 보세요.
- 미들웨어 트러블슈팅 가이드: Redis vs RabbitMQ vs Kafka 개발자를 위한 미들웨어 트러블슈팅 허브 글입니다. Redis, RabbitMQ, Kafka 중 어떤 증상부터 먼저 봐야 하는지와 어떤 문제 패턴이 각 시스템에 가까운지 정리합니다.
- Kubernetes CrashLoopBackOff: 먼저 볼 것들 startup failure, probe, config, resource limit 관점에서 CrashLoopBackOff를 어떻게 나눠서 봐야 하는지 정리한 가이드입니다.
- Kafka consumer lag가 계속 늘 때: 트러블슈팅 가이드 Kafka consumer lag가 계속 늘어날 때 무엇부터 봐야 하는지 정리합니다. poll 주기, 처리 속도, rebalance, consumer 설정까지 실전 기준으로 다룹니다.
- Kafka Rebalancing Too Often 가이드 Kafka consumer group에서 rebalance가 너무 자주 일어날 때 membership flapping, poll timing, protocol, assignment churn을 어떤 순서로 봐야 하는지 설명하는 실전 가이드입니다.
- Docker container가 계속 재시작될 때: 먼저 확인할 것들 exit code, command failure, environment mistake, health check 관점에서 Docker restart loop를 푸는 실전 가이드입니다.
심사 대기 중에는 광고 대신 관련 가이드를 먼저 보여줍니다.