다형성(polymorphism)
OOP에서 핵심적인 기능
다형성은 특정 기능을 선언(설계)부분과 구현(동작)부분으로 분리한 후 구현 부분을 다양한 방법으로 만들어 선택해서 사용할 수 있게 하는 기능이다. 여기서 선언부분은 인터페이스라고도 한다. (인터페이스의 가장 큰 특징 추상메서드) 자세히 설명하자면 선언부분은 구현코드가 전혀 없는 텅 빈 상태이며 일종의 지켜야 할 약속으로 가득 찬 일종의 규약 문서라고 보자. 개발자는 문제를 해결하는 구현 코드를 선언 부분에 맞게 구현하면 된다. 즉 선언부분과 구현부분은 1:N의 다형성 관계가 형성된다. / 프로그래밍적 관점으로 말해보자면 부모클래스의 참조변수로 자식클래스의 인스턴스를 다룰 수 있는 것!! (자바에서 매우 중요)이라고 할 수 있다는 것이다.
ex) 멀티탭과 전원 케이블
ex) 심플 이미지 갤러리와 정렬 기능
다형성과 데이터 타입과의 관계
1) 상속관계
2) 구현관계
이 두개의 관계에 있을 때 다형성이 적용된다.
지금까지 내용을 정리해보면 일반 OOP언어에서 데이터 타입은 아래와 같은 규칙을 가지고 있다.꼭 숙지하고 넘어가도록 하자.
아래 내용 매우 중요
① 변수 및 매개변수 선언 시 특정 인터페이스 타입인 경우 반드시 특정 인터페이스를 구현한 클래스의 인스턴스만을 저장하거나 매개변수 값으로 넘길 수 있다.
② 변수 및 매개변수 선언 시 특정 클래스 타입인 경우 반드시 특정 클래스 또는 특정 클래스를 상속받은 자식 클래스의 인스턴스만을 저장하거나 매개변수 값으로 넘길 수 있다.
자바스크립트에서의 다형성
! 부모클래스에 존재하는 추상 메서드를 다 오버라이딩하지 않으면 결국 그 클래스도 추상 클래스가 된다. 그러나 추상 메서드를 반드시 다 구현해야 하는 건 아니고 필요한 부분만 오버라이딩하여 사용하면 된다.
다형성은 부모 클래스의 참조변수(인스턴스변수)로 자손 클래스의 인스턴스를 다룰 수 있는 것. A,B,C 등의 자손 클래스가 있다면 필요로 하는 클래스를 골라 사용할 수 있다는 것. 코드 관리등의 측면에서 매우 효율적이다.