다형성은 하나의 이름이나 인터페이스가 문맥에 따라 서로 다른 형태로 드러나는 개념이다.[1][2] 객체지향 프로그래밍에서는 같은 호출이 여러 구현으로 이어지고, 유전학에서는 같은 자리에 둘 이상의 변이가 관찰되는 현상을 설명할 때 쓰인다.[1][2] 그래서 이 용어는 추상화와 분류를 함께 다뤄야 하는 문맥에서 자주 등장한다.[1][2]

1. 개요

다형성의 핵심은 같은 이름이지만 대상에 따라 다른 반응이 나온다는 점이다.[3][5] 호출하는 쪽은 공통 인터페이스만 알고 있어도 되고, 실제 동작은 객체의 구체 타입이나 생물학적 문맥에 따라 달라진다.[1][2][3]

이런 성질 때문에 다형성은 소프트웨어 설계와 유전 변이 해석을 연결하는 공통어처럼 작동한다.[1][2] 개념 자체는 단순하지만, 문맥에 따라 실행 시점의 분기와 집단 수준의 분포를 모두 가리킬 수 있어서 설명할 때 범위를 분명히 해야 한다.[1][2]

2. 객체지향 프로그래밍에서의 다형성

객체지향 프로그래밍에서 다형성은 상위 타입의 참조로 여러 하위 타입 객체를 다루며, 실제 호출 결과가 실행 시점에 선택되는 성질을 뜻한다.[3][5] 같은 메소드 이름이라도 객체의 종류에 따라 다른 동작을 수행하므로, 호출부는 구체 클래스를 직접 알 필요가 없다.[3]

이 방식은 인터페이스추상화를 중심으로 설계할 때 특히 유용하고, 확장성유지보수성을 높이는 기반이 된다.[3][5] 새 기능이 추가되더라도 호출부를 크게 바꾸지 않고 새로운 구현체를 붙일 수 있다는 점이 다형성의 실무적 가치다.[3][5]

3. 구현 방식과 언어별 사례

다형성은 보통 상속을 바탕으로 한 오버라이딩과 인터페이스 구현으로 드러난다.[3][5] 상위 클래스가 공통 계약을 제시하고 하위 클래스가 그 계약을 각자 다르게 채우면, 같은 호출이 다른 결과를 만든다.[5][6]

C++는 가상 함수를 통해 동적 바인딩을 설명하기 좋고, Java는 상위 타입 변수와 실제 객체의 분리를 보여 주기 쉽다.[5][6] Perl 같은 언어도 객체 지향 문맥에서 동일한 호출이 객체별 구현으로 분기되며, 언어마다 문법은 달라도 핵심 원리는 비슷하다.[7]

4. 유전학에서의 다형성

유전학에서 다형성은 집단 안에서 특정 변이가 둘 이상의 형태로 관찰되는 현상을 뜻한다.[1][2] 이는 돌연변이와 겹쳐 보일 수 있지만, 집단 수준의 분포와 기능적 의미를 함께 볼 때 더 정확하게 이해할 수 있다.[1][2]

개인 유전체 분석이 널리 쓰이면서 다형성은 질병 감수성이나 직접적 표적 치료 반응을 설명하는 용어로도 자주 사용된다.[1][2] 같은 변이라도 집단에서 얼마나 흔한지, 그리고 어떤 기능적 맥락에서 해석되는지가 중요해졌다는 점에서 현대 유전학의 다형성은 단순한 분류 용어를 넘어선다.[1][2]

5. 실생활 비유

다형성은 하나의 조작이 대상에 따라 다른 결과를 낳는 상황으로 비유할 수 있다.[3][5] 예를 들어 키보드에서 같은 '누르기' 동작이라도 ESC는 취소, ENTER는 실행처럼 서로 다른 기능을 수행한다.[3]

사용자는 내부 구현을 몰라도 정해진 인터페이스만 따르면 되고, 시스템은 대상별 동작을 분리해 유지할 수 있다.[3][5] 이런 구조를 떠올리면 다형성이 왜 상속인터페이스 설계에서 중요한지 쉽게 이해할 수 있다.[3][5]

6. 관련 문서

7. 인용 및 각주

[1] Medical genomics: The intricate path from genetic variant identification to clinical interpretation - PMC, PubMed Central, Ppmc.ncbi.nlm.nih.gov(새 탭에서 열림)

[2] Polymorphism, Genome.gov, Wwww.genome.gov(새 탭에서 열림)

[3] 다형성 - 생활코딩, OpenTutorials, Oopentutorials.org(새 탭에서 열림)

[5] Polymorphism in C++, GeeksforGeeks, Wwww.geeksforgeeks.org(새 탭에서 열림)

[6] Polymorphism in Java, GeeksforGeeks, Wwww.geeksforgeeks.org(새 탭에서 열림)

[7] Perl | Polymorphism in OOPs, GeeksforGeeks, Wwww.geeksforgeeks.org(새 탭에서 열림)