여러 인터페이스 구현하기

인터페이스는 다중 상속 가능
- 여러 개의 함수 시그니처 묶음을 전달을 받는 것과 동일한 개념

processData() 메서드의 매개변수로 전달할 때 ILoggable 타입 매개변수에 ILoggable, ISavable 인터페이스를 모두 구현한 ConsoleLogger 클래스의 개체를 전달해도 문제 없음
왜 인터페이스는 다중 상속을 허용하나?

다중 상속의 문제점은 “실체”를 중복해서 상속받는 것이 문제
- 상태 중복
- “메서드 구현”이 중복
다이아몬드 상속 문제
- C++에서 배움
- D는 B를 상속하면서, C를 상속
- B, C 모두 A를 상속
- D는 A를 중복해서 상속

인터페이스는 실체가 없어서 위 문제가 발생하지 않음
- 어차피 실행 중 실체는 하나로 결정되잖아?

함수 시그니처가 겹쳐도 자식 클래스(구현 클래스)에서 하나만 구현하면 문제 없음!!
- 여기서 시그니처는 메서드 이름, 매개변수 목록

public boolean save(String filename)으로 작성한 라인에서 컴파일 오류 발생
- 위에
public void save(String filename)이 이미 존재하니까

반환형만 다른 경우 컴파일 오류
- 컴파일러 입장에서 동일한 함수 시그니처
- 컴파일러 오류 메시지도 “already defined in class …” 중복 정의라고 말하고 있음
- 컴파일러 입장에서 구현된 메서드가 어떤 추상 메서드를 구현하는지 알 수 없음
컴파일러 입장에서 하나의 구현 메서드로 추상 메서드를 모두 구현해야 하는데, 둘 다 구현할 방법이 없음
반환형 말고 매개변수 목록이 달라지면?
- 애초에 함수 시그니처가 다르니까 각기 다른 추상 메서드의 구현으로 문제 없음