자바/기본적인 개념
인터페이스의 default & static 메서드
백_곰
2021. 12. 9. 17:39
1. static 메서드는 원래 인터페이스에서 사용 불가였다?
- JDK 1.8 전에는 불가능했지만, 이제는 default와 static 메서드를 사용할 수 있게
되었다.
- 옛날에는 java.util.Collection이라는 인터터페이스에 static 메서드가 있었는데 추상 메서드만
선언이 가능하다는 이유로 같이 넣지 못해서 Collections라는 클래스가 생성되게 되었다.
- static 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다.
2. 디폴트 메서드가 등장하게 된 배경
- 인터페이스에 새로운 메서드를 추가한다는 것은 엄청나게 까다롭다. 그 이유는
인터페이스로 구현한 클래스들이 전부 다시 구현해야 하기 때문이다.
- 그러한 이유 때문에, default 메서드를 고안하여 구현할 필요없는 것을 만들어냈다.
- default 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다.
- 충돌을 해결하는 규칙
(1) 여러 인터페이스의 디폴트 메서드 간의 충돌
--> 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.
(2) 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
--> 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.
3. 이해를 돕기위한 예제(1)


4. 이해를 돕기 위한 예제(2)


( 주의할 점은 두 인터페이스의 default 메서드들이 이름이 같다면, 구현하는 클래스에서는
무조건 구분지어 abstract 처럼 구현해주어야 한다. )