인터페이스
통신 도구, 통신 수단
특정 기능을 활용하는 방법
복잡한 내용을 알필요 없이 클래스를 쉽게 다룰수 있도록 정의해둔 장치, 내용
interface in java
interface Printable {
public void print(String doc); //추상 메소드
}
class Printer implements Printable {
public void print(String doc) {
System.out.println(doc);
}
}
Printable prn = new Printer();
prn.print("Hello");
인터페이스형 참조변수가 선언이 가능하다.
그리고 이 참조변수는 인터페이스 구현을 완료한 클래스를 참조할 수 있다.
인터페이스형 참조변수로 참조했을때는, 인터페이스에 존재하는 메소드만 실행이 가능하다! (추상 메소드)
단, 구현을 하는 클래스에서 당연하게 구현을 하기위해서 (추상메소드는 몸체가 없으니) 오버라이딩을 하게 될 것이다.
그렇기때문에 인터페이스에 메소드를 실행시켜도 결국은 오버라이딩 관계로 인하여 클래스에 정의된 함수가 실행될것이다.
인터페이스의 본질적 의미
인터페이스의 의미와 개념을 비교적 쉽게 이해할 수 있는 예시라고 생각된다.
위와같이 2개의 프린터가 있다고 생각해보자, 프린터 회사는 각 프린터에 맞는 드라이버 클래스를 만들고 제공해줄 것이다.
하지만 이를 실행시키는 OS입장에서는 모든 프린터의 사용 방법이 다르기 때문에 혼란을 겪을수 밖에 없다.
이러한 부분을 보완하고자, OS쪽에서 interface를 만들어서 회사측에 제공해준다, 기능을 명시해주고 이에 맞춘 개발을 요구하는 것이다.
각 회사는 public void print(String doc) 의 추상 메소드를 확인하고 각 회사에 맞는 스타일로 개발할 것이다.
OS입장에서는 어떤 프린터가 연결되어있던 상관없이 일관된 메소드로 프린터를 사용할 수 있는것이다.
interface는 클래스를 사용하는 방법을 명시해둔 내용이다. 이를 프린터 드라이브 예시로 이해할 수 있다.
interface 상속
흑백프린터만 사용하던 어느날, 컬러 프린터가 추가되었다고 가정해보자.
컬러 프린터를 사용하기 위해서는 드라이버(interface) 업그레이드가 필수적으로 동반될 것이다.
그래서 기존 흑백 프린터가 사용하는 드라이버를 업그레이드 한다고 해보자
이 경우에는 컬러프린터는 사용할 수 있겠지만 컬러출력 기능이 없는 흑백프린터 또한 컬러프린터에 관한 추상메소드를 정의해야할 것이다.
흑백프린터에게는 불필요한 이러한 상황을 방지하기 위하여 인터페이스 상속이 등장했다.
위와 같이 컬러프린터 드라이버가 흑백프린터 드라이버를 상속한다. 컬러프린터는 흑백프린팅도 지원해야하기에 두가지의 기능 모두 사용이 가능하다.
흑백프린터는 기존의 드라이버를 사용하면 된다.
컬러프린팅이 되는 프린터에 한해서 관련 interface 메소드를 구현해주면 된다.
//17-2 ③ 강의 이어서 ...
출처 : 윤성우의 열혈 JAVA 프로그래밍