default 메서드
디폴트 메서드는 추상 메서드의 기본적인 구현을 제공하는 메서드이다.
- 메서드 앞에 default 키워드를 붙이며 블럭{ }이 존재해야 한다.
- default 메서드의 접근 제어자는 public이며 생략이 가능하다.
사용 예시 코드
public class Main implements A {
@Override
public void a() {
System.out.println("A");
}
public static void main(String[] args) {
Main main = new Main();
main.a();
// 디폴트 메서드 재정의 없이 바로 사용가능합니다.
main.aa();
}
}
interface A {
void a();
default void aa() {
System.out.println("AA");
}
}
static 메서드
디폴트 메서드와 마찬가지로 추상 메서드의 기본적인 구현을 제공하는 메서드이다.
- static의 특성 그대로 인터페이스의 static 메서드 또한 객체 없이 호출이 가능하다.
- 선언하는 방법과 호출하는 방법은 클래스의 static 메서드와 동일합니다.
사용 예시 코드
public class Main implements A {
@Override
public void a() {
System.out.println("A");
}
public static void main(String[] args) {
Main main = new Main();
main.a();
main.aa();
System.out.println();
// static 메서드 aaa() 호출
A.aaa();
}
}
interface A {
void a();
default void aa() {
System.out.println("AA");
}
static void aaa() {
System.out.println("static method");
}
}
인터페이스에서 default 메서드와 static 메서드가 필요한 이유
여러 클래스에서 공통적으로 사용되는 기능을 상위개념으로 묶어서 인터페이스를 생성한 후, 그 클래스들에 인터페이스를 적용해두었는데, 나~중에 인터페이스를 적용한 여러 클래스들 중 하나의 클래스에서 기능(메서드)을 추가할 필요가 있을 때, default 메서드와 static 메서드를 사용하면 적절하게 대처할 수 있다.
인터페이스의 멤버 메서드들은 모두 추상 메서드이기때문에 인터페이스에 정의된 메서드들은 모두 하위 클래스에서 구현을 해주어야한다. 그런데 한 클래스에서 기능이 추가로 필요하다고 추상 메서드를 만들어버리면 다른 하위 클래스들에선 사용하지도 않는 추상 메서드를 구현해야하는 번거로움이 있고 그렇다고 만들어둔 인터페이스를 다른 걸로 대체하기에도 번거로움이 있다.
이럴 때 default 메서드와 static메서드를 사용해 인터페이스에 메서드를 직접 구현해둠으로써 추상 메서드가 아니기에 다른 하위 클래스에서는 따로 구현하지 않아도 됨과 동시에 새로 구현해둔 default / static 메서드가 필요한 클래스들만 인터페이스에서 가져다 쓰면 된다.
'개발 > Java' 카테고리의 다른 글
[Java] Generic (제네릭) 문법 / 필요한 이유 (1) | 2024.04.25 |
---|---|
[Java] 추상 클래스는 미완성된 설계도이다 (0) | 2024.04.25 |
[Java] 인터페이스를 쓰면 좋은 경우 / 추상 클래스를 쓰면 좋은 경우 정리 (1) | 2024.04.25 |
[Java] 인터페이스 / 인터페이스 상속 / 인터페이스 타입 변환 (0) | 2024.04.24 |
[Java] 추상 메서드 / 추상 메서드 오버라이딩 (cf. 일반 메서드 오버라이딩) (0) | 2024.04.24 |