interface Printable {
abstract public void print(String doc); // abstract = 추상 메소드 = 함수 선언 = 함수 정의
public static final int num = 0;
}
interface Movable {
abstract public void move();
}
class Printer implements Printable, Movable {
@Override
public void print(String doc) {
System.out.println(doc);
}
@Override
public void move() {
System.out.println("moving");
}
}
클래스
는 객체의 구체적인 특성과 동작을 나타내는 것이며,인터페이스
는 클래스가 구현해야 하는 메서드들의 규약을 제공합니다.클래스
는 객체를 생성하여 사용하고,인터페이스
는 클래스의 다형성과 유연성을 높여줍니다.클래스
는 상태와 동작을 가지고 있으며,인터페이스
는 메서드의 집합만을 갖습니다.
interface Printable { // MS가 정의하고 제공한 인터페이스
public void print(String doc);
}
//SPrinterDriver 와 LPrinterDriver를 만드시오
//Samsung
class SPrinterDriver implements Printable {
public void print(String doc) {
System.out.println("From Samsung printer");
System.out.println(doc);
}
}
//LG
class LPrinterDriver implements Printable {
public void print(String doc) {
System.out.println("From LG printer");
System.out.println(doc);
}
}
public static void main(String[] args) {
String myDoc = "This is a report about...";
// 삼성 프린터로 출력
Printable prn = new SPrinterDriver();
prn.print(myDoc);
System.out.println();
// LG 프린터로 출력
prn = new LPrinterDriver();
prn.print(myDoc);
}
/*
출력:
From Samsung printer
This is a report about ...
From LG printer
This is a report about ...
*/
@Override 어노테이션을 사용하면 컴파일러에게 해당 메서드가 상위 클래스나 인터페이스의 메서드를 재정의하는 의도를 알려줄 수 있습니다.
또한 가독성을 높이고 코드의 유지 보수성을 향상시키는데 도움을 줍니다. 상위 클래스나 인터페이스의 메서드를 재정의할 때 실수를 방지하고, 개발자에게 재정의된 메서드임을 명확하게 알려줍니다.
abstract
키워드는 자바에서 사용되며, 클래스, 메서드 또는 인터페이스를 추상화(abstract)하는 데에 사용됩니다.추상화는 구현 세부 정보를 감추고 상위 수준의 개념을 표현하기 위해 사용됩니다. 추상 클래스와 추상 메서드는 하위 클래스에서 구체적인 동작을 제공하도록 요구하며, 인터페이스는 클래스가 특정한 동작을 수행하기 위한 규약을 제공합니다.