자바/기본적인 개념

인터페이스의 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 처럼 구현해주어야 한다. )