여러 부모 클래스로부터 상속을 받을 수 있다면 다양한 동작을 수행할 수 있으나, 메소드의 출처가 모호해지는 등의 문제가 발생할 수 있다.
이러한 이유들로 Java에서는 다중 상속을 지원하지 않는다.
하지만 다중 상속을 통한 이점들은 충분히 매력적이기에, Java는 Interface를 통해 다중 상속을 지원하고 있다.
Interface는 다른 클래스를 작성할 때 기본이 되는 틀을 제공하고, 다른 클래스 사이의 중간 매개 역할까지 담당한다.
다른 클래스 작성 시의 기본 틀 + 다른 클래스 사이의 중간 매개 역할 = Interface
'다른 클래스 사이의 중간 매개 역할'이라는 설명이, 게임 속에서 유저와 프로그램 사이의 중간 역할을 수행하는 '인터페이스'와 맥락을 같이 하고 있음을 확인할 수 있다.
Interface와 Abstract class의 구조를 보면 꽤나 비슷하다고 생각할 수 있다.
Abstract class는 추상 메소드 + 생성자, 필드, 일반 메소드를 포함할 수 있으나, Interface는 추상 메소드와 상수만을 포함할 수 있다.
public abstract class animal {
String name;
int age;
public animal(String name) {
this.name = name;
this.age = 0;
} // 생성자
public abstract void bark(); // 추상 메소드
public void eat() {
System.out.println("Yummy.");
}
}
import hello.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}