인프런 커뮤니티 질문&답변
다형성 개념 문의
작성
·
19
·
수정됨
1
안녕하세요, 요즘 이직 준비하면서 CS 인사이드나 좀 얻고자 해당 강의를 무료로 수강 중인데요. 우선 영상 만드시는데 수고하신 것 같습니다만 이해가 안되는 부분들(다형성)이 있어서 문의드립니다.
2강 '객체지향은 어떻게 동작하는가?'
6:08 해당 주제명과 코드는 추상화 라고 해야 적합할 듯한데요. OCP는 추상화에 관련 있기도 하고요
6:26 다형성의 핵심은 부모타입으로 다루는 것(구현이 아닌 추상에 의존한다) 이 말씀이 무슨 말씀인지 이해가 잘 안되는데, 공부하셨던 자료 출처가 있을까요?
결론적으로 문의를 요약하면 다형성 개념을 오버로딩/오버라이딩 개념보단 추상화 개념으로 보는 것 같은 데 다형성과 추상화과 어떤 관련이 있는 지 궁금하며 공부하신 자료 출처를 남겨 놔주시면 다른 이들도 함께 공부하는 기회가 될 것 같습니다 :))
답변 3
1
언급해주신 Luca Cardelli & Peter Wegner (1985), "On Understanding Types, Data Abstraction, and Polymorphism" (ACM Computing Surveys, Vol. 17, No. 4)
이 논문이 제 질문의 요지에 핵심이고 사실상 'Overriding' 이란 단어(Wording)를 발견하지 못했지만, 주요 개념들을 논문에서 보고, 다른 써치를 통해 짚어본 결과
오버라이딩이 sub 타입의 다형성(부모 클래스의 메소드 재정의)을 의미하며,
다형성의 종류는 ad-hoc 다형성(오버로딩이 대표적)/ subtype의 다형성 (오버라이딩)/제네릭(T)/강제변환(캐스팅) 이 있는데
다형성과 추상화는 엄밀히 개념을 구분 해야 하며/ 다형성과 추상화를 관련 시켜 설명하면, 객체 지향 설계를 위한 추상화 작업에서 포함되는 주요 작업이 다형성의 오버라이딩 개념이다 라고 이해하면 되지 않을 까 합니다.
즉 답변에서 말씀하시는 것처럼 '객체지향 관점에서, 추상화를 구현하기 위해선 다형성 기법들 중 Sub 타입의 다형성을 사용하며 이것이 곧 핵심이다' 로 정리하면 되겠네요.
강의 자료와 답변이 부자연스럽고 할루시네이션이 존재하는 AI가 답변하는 느낌을 받았습니다. 결합도를 낮추기 위한 DIP까지 TMI로 나올 줄은 몰랐네요.
AI를 활용해 정돈된 답변을 하는 것도 좋지만, AI 답변을 좀 더 점검해서 질문자의 질문 의도를 명확히 파악하고 쉽게 설명해주는 것도 AI를 잘 다룰 수 있는 좋은 능력이라 생각하며, 제 개인적인 피드백이었습니다 :))
(보통 면접이나 실무에서 Sub type의 다형성 이란 워딩을 단 한번도 사용해보지는 않았지만, 덕분에 영어로 사용하는 CS용어들은 덤으로 알아갑니다 ㅎㅎ)
1
좋은 질문 감사합니다!
다형성을 오버로딩/오버라이딩으로만 설명하는 것은 사실 다형성의 일부만 다루는 것입니다. Cardelli & Wegner(1985)의 분류에 따르면 오버로딩은 임시적 다형성(ad-hoc polymorphism) 의 한 종류이고, 객체지향 설계에서 핵심으로 다루는 것은 서브타입 다형성(inclusion polymorphism) 입니다.
"부모 타입으로 다룬다 = 구현이 아닌 추상에 의존한다"는 GoF의 "Program to an interface, not an implementation" 원칙과 동일한 맥락으로, 코드가 구체적인 클래스가 아니라 인터페이스/추상 타입에만 의존하면 새로운 구현체를 추가해도 기존 코드를 수정할 필요가 없습니다. 이것이 OCP가 다형성/추상화와 연결되는 이유입니다.
1. 다형성(Polymorphism)의 정의 — 오버로딩/오버라이딩을 넘어서
Luca Cardelli & Peter Wegner (1985), "On Understanding Types, Data Abstraction, and Polymorphism" (ACM Computing Surveys, Vol. 17, No. 4)
이 논문은 다형성을 다음 네 가지로 분류한 가장 권위 있는 원전입니다:
Parametric polymorphism (제네릭)
Inclusion polymorphism (서브타입 다형성 — 상속/인터페이스)
Overloading (임시 다형성)
Coercion (강제 변환)
오버로딩은 다형성의 한 종류일 뿐이며, 객체지향에서 핵심으로 다루는 다형성은 Inclusion polymorphism(서브타입 다형성) 입니다.
2. "부모 타입으로 다룬다" = "구현이 아닌 추상에 의존" — 이게 무슨 뜻인가?
Barbara Liskov (1987), "Data Abstraction and Hierarchy" (SIGPLAN Notices)
리스코프 치환 원칙(LSP)의 원전으로, 핵심 개념은 이것입니다:
"If S is a subtype of T, then objects of type T may be replaced with objects of type S without altering any of the desirable properties of that program."
즉, 코드가 구체적인 자식 클래스(구현)를 몰라도 부모 타입(추상)만 알면 동작해야 한다는 것이고, 이것이 "구현이 아닌 추상에 의존"의 의미.
3. OCP와 다형성/추상화의 관계
Robert C. Martin (1996), "The Open-Closed Principle" (C++ Report)
"A module should be open for extension but closed for modification."
Martin은 이 원칙을 달성하는 핵심 수단으로 추상화(abstraction) + 다형성(polymorphism) 을 명시합니다. 새로운 구현체를 추가할 때 기존 코드를 수정하지 않아도 되는 이유가 바로 부모 타입(인터페이스/추상클래스)에 의존하기 때문입니다.
GoF (Gang of Four), "Design Patterns" (1994) — Erich Gamma 외
"Program to an interface, not an implementation."
위 문장이 "추상에 의존"의 유명한 표현.
4. DIP(의존성 역전 원칙)와의 연결
Robert C. Martin, "Agile Software Development" (2002)
"High-level modules should not depend on low-level modules. Both should depend on abstractions."
"구현이 아닌 추상에 의존"과 정확히 같은 맥락.
참고 자료:
Cardelli & Wegner (1985) — "On Understanding Types, Data Abstraction, and Polymorphism"
Barbara Liskov (1987) — "Data Abstraction and Hierarchy"
Robert C. Martin (1996) — "The Open-Closed Principle"
GoF (1994) — "Design Patterns: Elements of Reusable Object-Oriented Software"
-1
안녕하세요, 인프런 AI 인턴입니다. jlim님.
다형성과 추상화는 객체지향 프로그래밍에서 중요한 개념입니다. 두 개념은 밀접하게 연관되어 있습니다. 다형성은 같은 메시지를 다르게 처리할 수 있는 능력을 의미하며, 추상화는 복잡한 시스템을 단순화하여 개념을 정의하는 과정입니다. 다형성에서 중요한 점은 “부모 타입으로 다룬다”는 것이며, 이는 코드의 유연성과 재사용성을 높여줍니다.
다형성과 추상화의 관계를 자세히 이해하기 위해 아래의 유사한 질문과 해답을 참고하시길 추천드립니다.
- UML과 객체지향 설계 입문 강의의 다형성 설명: 이 답변에서는 객체지향의 다양한 측면, 특히 다형성과 추상화 사이의 관계를 설명합니다. 두 개념이 어떻게 코드의 유연성을 높이는지 이해하는 데 도움이 될 것입니다.
이 질문과 대답에서 얻고자 하는 정보는 다형성을 향상시키기 위해 추상화가 왜 중요한지를 정확히 이해하는 것입니다. 부모 타입으로 다루는 것은 코드가 특정 구현이 아닌 구조 및 인터페이스에 더 초점을 두어 다양한 구현을 사용할 수 있게 만들어 줍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






정확하게 짚어주셨습니다.
다형성과 추상화는 엄밀히 다른 개념이지만, 객체지향 설계에서 추상화를 구현하는 핵심 수단이 서브타입 다형성(오버라이딩) 입니다.
즉, 인터페이스나 추상클래스로 추상화를 정의하고, 이를 오버라이딩으로 구체화하는 것이 "구현이 아닌 추상에 의존한다"는 말의 실질적인 의미입니다.
오버로딩은 다형성의 또 다른 종류(ad-hoc)이지만, 객체지향 설계 맥락에서 주로 다루는 다형성은 서브타입 다형성이라 강의에서 그 부분에 집중했습니다.
개념 정리에 도움이 되셨으면 좋겠습니다
감사합니다 :)