[Java in Action] Default Method, Static Method 란?

728x90
반응형
SMALL

디폴트 메서드

추상 메서드만 가질 수 있던 인터페이스에서 default 키워드를 사용해서 메서드를 선언할 수 있다.

 

인터페이스는 자신을 구현하는 클래스에서 메서드를 구현하지 않을 수 있는 새로운 메서드 시그니처를 제공한다.

 

인터페이스를 구현하는 클래스에서 구현하지 않은 메서드는 인터페이스 자체에서 기본으로 제공한다.

 

디폴트 메서드는 구현 클래스에서 구현할 필요 없다. (재정의해도 상관은 없다. 추상 메서드처럼 필수만 아닐 뿐)

 

 
 
public interface Map<K, V> {
    int size();
    boolean isEmpty();
     
    ...
    
    default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue;
    }
 
    public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() {
        return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getValue().compareTo(c2.getValue());
    }

}

정적 메서드

디폴트 메서드와 함께 Java 8에 추가된 기능으로, 인터페이스에 직접 정적 메서드를 선언할 수 있게 되었다.

 

유틸리티 클래스를 없애고 직접 인터페이스 내부에 정적 메서드를 구현할 수 있게 되었다.

 
public interface Calculator { 

    public int plus(int pre, int post); 
    public int multi(int pre, int post); 
    
    default int execPlus(int pre, int post) {
        return pre + post; 
    } 
    
    static int execMulti(int pre, int post) { 
        return pre * post; 
    } 
}

정리

default로 제공되는 기능들이 유용해서 자주 사용할 것으로 보인다.

 

static 메서드 또한, 기존에는 Utils로 추출해서 사용했는데 그럴 필요가 없어서 편리할 것으로 보인다.

 

얼른 사용해봐야지.

728x90
반응형
LIST