인터페이스의 기본과 그 의미

이한주·2023년 3월 6일
0

추상 메소드만 담고 있는 인터페이스

인터페이스는 다음과 같다.

class 대신 interface라는 선언을 쓰고, 메소드는 바디 없이 세미콜론으로 마무리 된다.

interface Printable {
		public void print(String doc);  // 추상 메소드
}

위에서 보듯이 메소드의 몸체가 비어 있는 메소드를 가리켜 추상 메소드라 한다.

인터페이스를 대상으로는 인스턴스 생성이 불가능하다.

클래스가 인터페이스를 상속하는 행위는 상속이 아닌 구현이다.

인터페이스 구현에는 다음과 같은 특징이 있다.

  • 구현할 인터페이스를 명시할 때 implements를 사용한다.
  • 한 클래스는 둘 이상의 인터페이스를 동시에 구현할 수 있다.
  • 상속과 구현은 동시에 가능하다.

인터페이스 관련하여 다음 두 특징도 기억해야 한다.

  • 인터페이스의 형을 대상으로 참조변수의 선언이 가능하다.
  • 인터페이스의 추상 메소드와 이를 구현하는 메소드 사이에 오버라이딩 관계사 성립한다.

다음은 인터페이스 문법을 확인하는 예제다.

interface Printable {
    public void print(String doc);
}

class Printer implements Printable {

    @Override
    public void print(String doc) {
        System.out.println(doc);
    }
}

public class PrintableInterface {
    public static void main(String[] args) {
        Printable prn = new Printer();
        prn.print("Hello Java");
    }
}

인터페이스의 본질적 의미

인터페이스의 사전적 의미는 연결점 또는 접접으로 둘 사이를 연결하는 매개체를 뜻한다.

실제로 자바의 인터페이스는 그 역할을 한다.

마이크로소프트의 윈도우는 삼성과 LG의 프린터를 대상으로 출력을 진행할 수 있다.

위 예제를 자바로 기준으로 설명하면 다음과 같다.

이 일을 주도하는 것은 마이크로소프트다.

프린터를 제작하는 업체가 한 둘이 아니기 때문에 마이크로소프트는 다음과 같은 결정을 내린다.

인터페이스를 하나 만들어서 모든 프린터 업체에게 제공해야 하겠다.

그래서 다음 인터페이스를 만들어 모든 프린터 회사에 제공한다.

interface Printable {
    public void print(String doc);
}

위는 다음 의미를 가진다.

  • 이 인터페이스를 회사별로 각자 구현해서 가져오기 바란다.
  • 그러면 마이크로소프트는 print 메소드를 호출하면서 출력할 문서의 정보를 인자로 전달하겠다.

Printable 인터페이스를 전달받은 삼성과 LG는 자사의 프린터 사용에 필요한 클래스를 다음과 같이 제공한다.

이것을 가리켜 프린터의 드라이버라한다.

class SPrinterDriver implements Printable {
		@Override
		public void print(String doc) {...}
}

class LPrinterDriver implements Printable {
		@Override
		public void print(String doc) {...}
}

여기서 중요한 것은 마이크로소프는 위 클래스 이름만 알면 되고 내부적으로 구현을 알 필요가 없다.

그것이 인터페이스를 두는 이유다.

0개의 댓글