다형성 (Polymorphism)이란?
간단히 말하면 "One Interface, Multiple Implements" 이다.
즉, 하나의 메시지 방식으로 여러 구현을 하는 것이다.
인터페이스(interface)는 일종의 추상 클래스로 구현하는 측과 사용하는 측의 약속이다.
인터페이스는 구현된 메서드를 정의할 수 없고
오직 추상메서드(abstract method)와 public static final 상수만 가질 수 있다.
Interface의 예시
interface Play { public void player(); public void stop(); } class MP3Player implements Play{ public void player() { System.out.println("MP3를 재생합니다"); } public void stop() { System.out.println("MP3를 정지합니다"); } } class CDPlayer implements Play{ public void player() { System.out.println("CDPlayer을 재생합니다."); } public void stop() { System.out.println("CDPlayer를 정지합니다."); } } public class Test { public static void main(String[] args) { Play p=new CDPlayer(); Play p2=new MP3Player(); // 상위 인터페이스 타입의 변수로 하위 구현 객체를 참조할 수 있다 p.player(); p.stop(); p2.player(); p2.stop(); } }
재생과 정지라는 버튼 기능을 추상화하여 다양한 기기에서 재생과 정지를 할 수 있다.
실제 구현 method를 몰라도 인터페이스 Play를 기기 타입으로 참조받아 사용할 수 있다.
인터페이스를 이용한 다형성의 장점
1) 개발 시간을 단축시킬 수 있다.
호출하는 측과 구현하는 측을 나눠 구현하기 때문에 호출하는 측에서는 메서드 구현 내용과 관계없이
선운부만 알면 사용이 가능하므로 동시 개발이 가능하다.
2) 표준화가 가능
인터페이스가 명세의 역할을 하기 때문에 일관되고 정형화된 프로그램의 개발이 가능하다.
3) 서로 관계가 없는 클래스들의 관계를 맺어 줄 수 있다.
하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다.
4) 독립적인 프로그램이 가능하다.
선언과 구현을 분리하여 독립적으로 프로그램 작성이 가능하다.
결과적으로 생성성을 높이고 유지보수성이 좋아진다.