인터페이스

  • 자동적으로 상수와 추상메서드가 선언된다.
  • 멤버 변수에는 public static final 이 자동으로 붙는다.
  • 메서드에는 public abstract 가 자동으로 붙는다.
  • 형식적인 선언만 있고 구현은 없다.
interface 인터페이스 이름 {
   public static final float pi = 3.14f;
   public void add();
}

인터페이스 구현과 형 변환

  • 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있다.
  • 상속에서의 형 변환과 동일한 의미이다.
  • 단 클래스 상속과 달리 구현코드가 없기 때문에 여러 인터페이스를 구현할 수 있다.
  • 형 변환시 사용할 수 있는 메서드는 인터페이스에서 선언한 메서드만 사용할 수 있다.

인터페이스와 다형성

  • 인터페이스는 Client code 와 서비스를 재공하는 객체 사이의 약속이다.
  • 어떤 객체가 어떤 interface 타입이라 함은 그 interface가 제공하는 메서드를 구현했다는 의미
  • Client는 어떻게 구현되었는지 상관 없이 interface의 정의만을 보고 사용 가능 (ex.JDBC)
  • 다양한 구현이 필요한 인터페이스를 설계하는 일은 매우 중요한 일이다.

왜 인터페이스를 사용하는가?

  • UserInfoWeb은 IUserInfoDao 에 정의된 메소드 명세만 보고 Dao를 사용할 수 있으며, Dao 클래스들은 IUserInfoDao에 정의된 메소드를 구현할 책임이 있다.

인터페이스의 요소

  • 상수 : 모든 변수는 상수로 변환
  • 추상 메서드 : 모든 메서드는 추상 메스드로 구현
  • 디폴트 메서드 (java 8부터 추가)  : 기본 구현을 가지는 메서드, 구현 클래스에서 재정의 할 수 있음
  • 정적 메서드 (java 8부터 추가)  : 인스턴스 생성과 상관 없이 인터페이스 타입으로 사용할 수 있는 메서드
  • private 메서드 (java 8부터 추가)  : 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 없음. 인터페이스 내부에서만 기능을 제공하기 위하여 구현하는 메서드

디폴트 메소드

  • 선언부에 default를 덧붙여 사용
  • 하위 클래스에서 재정의 가능

정적 메소드

  • 인터페이스의 이름만으로 호출하여 사용 Calc.total();

private 메소드

  • 인터페이스 내부에 private 혹은 private static 으로 선언한 메서드 구현
  • privat static은 정적 메서드에서 사용 가능

두 인터페이스의 디폴트 메서드가 중복되는 경우

  • 구현한 클래스에서 중복된 디폴트 메서드를 재정의

인터페이스 상속

  • 인터페이스 간에도 상속이 가능
  • 구현코드의 상속이 아니므로 형 상속 (type inheritance)라고 한다.

인터페이스 구현과 클래스 상속 함께 사용하기

  • 실제 프레임워크를 사용하면 클래스를 상속 받고 여러 인터페이스를 구현하는 경우가 있음

'Back-end > java' 카테고리의 다른 글

제네릭 프로그래밍  (0) 2021.06.22
기본 클래스  (0) 2021.06.22
추상클래스  (0) 2021.06.22
상속과 다형성  (0) 2021.06.22
배열과 ArrayList  (0) 2021.06.21

+ Recent posts