포스트

24. 인터페이스

인터페이스에 대해 알아가보자.

24. 인터페이스

인터페이스

인터페이스의 존재이유

인터페이스를 사용하게 되면 프로그래밍의 일관성을 제공해준다.

  1. 인터페이스 사용 전
    인터페이스 사용 전
  • 메서드를 만들 때 동일한 기능을 만드는데 메서드가 다르다면 프로그래밍의 일관성이 사라진다.
  • 호출도 따로따로 지정해주어야해서 불편함.
  1. 인터페이스 사용 후
    인터페이스 사용 후
    • 메서드의 이름이나 파라미터 등 규칙을 정의해놓는다.
    • 호출이 일관되어 편리해진다.

호출자와 피호출자

호출자와 피호출자
ex.

1
2
Worker w;
w = ? // Worker 인터페이스의 규칙에 따라 만든 클래스(+ 자식 클래스)의 인스턴스

인터페이스와 개발자

웹 어플리케이션을 실행하는 서버 구현 시…

servlet 인터페이스
servlet 인터페이스 사용

Httpsession
HttpSession

  • Servlet Container에 Server와 HttpSession이라는 인터페이스가 있고 이 서버를 구현하는 구현체를 개발자가 작성하기만하면된다.
  • 내부적인 서버가 돌아가는 코드를 알 필요없이 해당 메서드만 호출하여 사용하면되기 때문에 편리하다.

default 메서드

default 메서드란?

  • 추상 메서드만 사용 가능한 인터페이스 내에서 구현을 할 수 있게 해주는 문법
    1
    2
    3
    4
    5
    6
    
    public interface MyInterface {
      // 기본 메서드
      default void myMethod() {
          System.out.println("This is a default method");
      }
    }
    

    default 메서드 도입 전
    default 도입 전

  • ToolA와 ToolB는 f3이 필요 없지만 interface를 구현함으로써 f3 추상 메서드를 무조건 구현해야한다.

default 메서드 도입 후
default 도입 후

  • 이를 default 메서드를 통해서 인터페이스에서 임시적으로 구현 후 ToolC에서 직접 구현하여 사용할 수 있다.

인터페이스 상속과 구현

인터페이스 상솟

왼쪽 처럼 인터페이스를 상속 받은 인터페이스 B에 대해 동작하는 원리를 알아보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
My obj = new My();
obj.m1();
obj.m2();
obj.x();

B obj2 = obj;
obj2.m2();
obj2.m1();
obj2.x();   // 에러

A obj3 = obj;
obj3.m1();
obj3.m2();  // 에러
obj3.x();   // 에러

인터페이스 다중 상속

인터페이스 다중 상속

왼쪽 처럼 interface를 다중 상속을 받은 인터페이스 C가 있다고 하자.

1
2
3
interface C extends A, B{
    void m3();
}

위처럼 인터페이스에 인터페이스를 다중 상속 받을 경우 쉼표로 구분해 사용 할 수 있다.
x( ) 메서드 처럼 중복되어 있는 경우에도 최종 구현하는 클래스에서 하나만 만들면 되기에 문제가 없다.

다만…. 아래처럼 리턴 값이 다른 x( ) 메서드 일 경우에는 에러가 난다.

1
2
interface A{ int x(); }     // 자바는 리턴 타입만 다른 메서드를 중복해서 만들 수 없다.(파라미터는 가능)
interface B{ void x(); }    // Overloading 규칙을 어기기 때문에 실행 불가.

인터페이스 다중 구현

다중 구현

왼쪽 처럼 인터페이스를 다중 구현하는 클래스 My가 있다고 하자.

1
2
3
4
5
class My implements A, B{
	void m1(){ - }
	void m2(){ - }
	void x(){ - }
}

위 처럼 인터페이스를 다중 구현 할 때도 마찬가지로 쉼표로 구분한다.
인터페이스의 상속처럼 x( ) 메서드 처럼 중복되는 경우 하나만 구현하면 되고 리턴 값이 다른 경우 오버로딩 규칙을 어기기 때문에 에러가 난다.

인터페이스와 추상 클래스

인터페이스와 추상 클래스

  • 인터페이스와 추상 클래스를 같이 쓸 경우 모든 메서드를 전부 구현해야한다는 부담감이 줄어든다.
짤지식
  • 인터페이스 = (Protocol= 프로토콜)이라고도 부름
  • 인터페이스에 선언된 메서드는 인터페이스의 클래스 이름으로 호출, 클래스에 선언된 메서드도 클래스의 이름으로 호출하는게 좋다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.