인터페이스
- 인터페이스의 모든 메서드는 public abstract 메서드이다. (public abstract는 생략 가능)
- 인터페이스의 모든 멤버 변수는 public static abstract 멤버 변수이다. (public static abstract는 생략 가능)
- 생략한 제한자는 컴파일러가 자동으로 추가함
default method
JDK 1.8부터 인터페이스에 구현부가 있는 default method 또는 static method를 넣어 줄 수 있다. 왜 default method가 추가되었을까?
기존의 인터페이스에 기능의 확장을 위해 메서드를 추가할 때가 있다. 이때 abstract 메서드로 추가한다면 해당 인터페이스를 구현한 모든 구현체에서 추가한 abstract 메서드를 반드시 구현해야 된다는 문제점이 발생한다. 예를 들어 java.util의 Map 인터페이스에 abstract 메서드를 추가하면 해당 인터페이스를 사용하고 있는 모든 프로그램들의 수정이 필요하다.
이 문제를 막기 위해 인터페이스에서 메서드 추가 시 default 메서드로 추가한다. default 메서드는 abstract 메서드가 아니므로 구현체가 반드시 구현할 필요가 없다. 필요하다면 구현체에서 default 메서드를 그대로 사용하거나 오버라이딩해 사용하면 된다.
아래의 사진은 Map 인터페이스의 일부 메서드를 나타낸 것이다. default가 붙은 메서드는 기능 확장을 위해 나중에 추가된 메서드임을 알아두자.