본문 바로가기

Java

Java default 메서드와 static 메서드

 

인터페이스에 abstract 메서드만 가질 수 있다는 것을 깨고 JDK1.8부터 default 메서드, static 메서드 추가가 가능해짐

 

1. 인터페이스에 default 메서드와 static 메서드가 추가된 이유?

1) static 메서드

인스턴스와 관계가 없는 독립적인 메서드이기 때문에 추가하지 못할 이유가 없었음

 

2) default 메서드

추상 메서드 추가가 되면 모두 구현해야하기 때문에 새로운 추상 메서드를 추가하기 어려운 문제 발생,

하지만 기능의 추가 또는 에러 등의 문제로 추상 메서드를 추가할 수 밖에 없고 이를 해결 하기위해 디폴트 메서드 고안됨

 

 

2. 디폴트 메서드(default method)

- 추상메서드의 기본적인 구현을 제공하는 메서드

- 디폴트 메서드는 인스턴스 메서드로 인터페이스 원칙의 위반됨, 인터페이스 예외 상황으로 봐야함

interface MyInterface {
    void method();	
    default void newMethod() { // default 키워드를 붙이고 메서드 구현부가 있어야함
    }
}

 

 

3. 디폴트 메서드가 기존의 메서드와 충돌할 때 해결 방법

 

1) 여러 인터페이스의 디폴트 메서드 간 충돌

- 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩

 

2) 디폴트 메서드와 조상 클래스의 메서드 간 충돌

- 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시됨