인터페이스란?

인터페이스는 추상메소드와 상수(static final)만을 멤버로 갖는다. jdk1.8이상에서는 static메소드와 default메소드도 멤버로 가질 수 있다.

추상 클래스보다 추상화 정도가 높다고 할 수 있다.

인터페이스는 다음과 같이 작성한다.

interface PlayingCard {
		public static final int SPADE = 4;
		final int DIAMOND = 3; // public static final int DIAMOND
		static int HEART = 2; // public static final int HEART
		int CLOVER = 1; // public static final int CLOVER

		public abstract String getCardNumber();
		String getCardKind(); // public abstract String getCardKind();
}

모든 멤버는 public static final 이고, 모든 메소드는 public abstract이다. 컴파일러가 자동으로 추가해준다. static, default메소드는 예외이다.

상속, 구현

인터페이스끼리는 상속을 할 수 있다. 다중 상속도 가능하다.

Object클래스 같은 최고 조상은 없다.

extends를 사용한다.

인터페이스는 클래스를 통해 구현된다. 이때는 implements키워드를 사용하며, 여러개의 인터페이스를 구현할 수 있다.

조상의 메소드를 오버라이딩 할 때나, 인터페이스를 구현 할 때나 마찬가지로, 조상의 접근제어자보다 넓은 범위의 접근제어자를 사용해야한다.

인터페이스를 통해 다중상속 구현하기

자바는 다중상속을 할 수 없기에 다중상속의 장점을 잃게된다.

<aside> 💡 다중 상속의 장점은?

</aside>

인터페이스를 통해 구현할 수 있는데, 한쪽은 상속을 받고, 한쪽은 포함관계로 구현한다.

인터페이스를 통해 구현해야하는 메소드를 만들어 두고, 나머지 클래스를 포함관계로 해서 다중상속처럼 사용할 수 있다.

인터페이스를 통한 다형성

연관이 없는 클래스들 사이에 인터페이스를 통하여 관계를 줄 수 있다.