프로그래밍에서 말하는 인터페이스
인터페이스= 통신방법 도구/수단
인터페이스를 정의할 때 메소드는 몸체를 갖지 않는다. 이런 메소드를 추상 메소드라고 한다. 인터페이스는 클래스가 아니기 때문에 인스턴스를 생성할 수 없다. implements 키워드를 통해 클래스에서 인터페이스는 구현될 뿐이다.
인터페이스형 참조변수는 인터페이스를 구현한 클래스의 인스턴스를 참조 할 수 있다. 인터페이스는 메소드 구현체가 없으므로 메소드 오버라이딩한 것은 아니지만, 메소드의 호출 관계에서는 오버라이딩 관계가 성립한다. 따라서, @Override을 쓸 수 있다.
만약 Printer에 print메소드 뿐만 아니라 수 많은 메소드가 존재하고, 개발자는 print 추상 메소드를 제공하는 Printable인터페이스를 만들었다고 가정하자. 개발자가 인터페이스를 만든 의도는 무엇일까? 예를 들어 커피자판기를 생각해보자. 커피자판기 내부에는 수 많은 기능이 있을 것이다. 예를 들면, 커피 별로 설탕 양, 물 양을 조절해주는 기능도 있을 것이다. 하지만 사용자가 내부를 이해할 필요는 없다. 사용자가 알아야 할 기능은 돈을 넣으면 커피가 나온다는 것일 뿐이다. 이처럼 인터페이스의 역할은 꼭 알아야 할 기능의 사용 설명서와 같다.
//위의 예제의 Robot선언을 통해 아래처럼 4개의 인스턴스 생성 가능하다.
Robot robot= new Robot();
Machine machine= new Robot();
Movable movable= new Robot();
Runnable runnable= new Rbot();
인터페이스 사용 시나리오
만약, 삼성프린터와 LG프린터의 프린터 사용 방법이 다르면 운영체제 개발에 어려움이 있을 것이다(운영체제는 회사마다 프린터 사용 방법을 구분해줘야하는 수고로움이 있다). 이런 문제를 막기 위해 MS에서 프린터 사용 방법을 제공하고, 그 기준으로 각 회사가 드라이브를 개발한다면 문제를 해결할 수 있을 것이다.
interface MSPrintable{ //MS에서 제공하는 인터페이스
public void print(String doc);
}
class SPrinterDriver implements MSPrintable{//삼성프린터
public void print(String doc){
System.out.println(doc);
System.out.println("삼성프린터");
}
}
class LPrinterDriver implements MSPrintable{//LG프린터
public void print(String doc){
System.out.println(doc);
System.out.println("LG프린터");
}
}
public class Solution {
public static void main(String[] args) {
MSPrintable ms= new SPrinterDriver();
ms.print("What kind of Printer");
System.out.println();
ms = new LPrinterDriver();
ms.print("What kind of Printer");
}
}
//출력:
// What kind of Printer
// 삼성프린터
// What kind of Printer
// LG프린터
'Programming > Java' 카테고리의 다른 글
JAVA 17(3) 인터페이스의 static 메소드 (0) | 2021.08.04 |
---|---|
JAVA 17(2) 인터페이스의 기본 접근 지정자 (0) | 2021.08.04 |
JAVA 16 상속이 도움 되는 상황 (0) | 2021.08.04 |
JAVA 15 오버라이딩 (0) | 2021.08.04 |
JAVA 14 상속 (0) | 2021.08.04 |