EEALL@ONCE

☕인터페이스에 `static` 메서드와 `default` 메서드 : java 8 이후 본문

언어💻/자바☕

☕인터페이스에 `static` 메서드와 `default` 메서드 : java 8 이후

올엣원스 2023. 12. 1. 20:08
728x90

Java 8에서 도입된 인터페이스의 기능 강화로, `static` 메서드와 `default` 메서드는 기존의 인터페이스에 새로운 기능을 추가하는 데 사용됩니다.

1. `static` 메서드:

`static` 메서드는 인터페이스 자체의 메서드로서, 인터페이스의 인스턴스 생성 없이도 호출할 수 있습니다. 주로 헬퍼 메서드나 공통 기능을 제공하는 데 사용됩니다. 예시 코드에서 `announcement` 메서드가 `static`으로 선언되어 있습니다.

```java
public interface FoodSafety {
    static void announcement(){
        System.out.println("식품안전 관련 공지");
    }
    // 나머지 코드 생략...
}
```

호출은 다음과 같이 이루어집니다:

```java
FoodSafety.announcement();
```



이러한 `static` 메서드는 해당 인터페이스를 구현하는 클래스에서 상속되지 않습니다. 즉, 구현 클래스에서 `announcement` 메서드를 다시 정의할 필요가 없습니다.

 2. `default` 메서드:

`default` 메서드는 인터페이스에 기본 구현을 제공하는 데 사용됩니다. 이를 통해 새로운 메서드를 추가할 때 기존의 구현체를 깨지 않고 확장할 수 있습니다. 예시 코드에서 `regularInspection` 메서드가 `default`로 선언되어 있습니다.

```java
public interface FoodSafety {
    default void regularInspection(){
        System.out.println("정기 체크");
    }
    // 나머지 코드 생략...
}
```

구현 클래스에서 이 메서드를 재정의하지 않으면 인터페이스에서 제공하는 기본 동작을 사용합니다. 필요한 경우 구현 클래스에서 재정의하여 특정한 동작을 추가하거나 변경할 수 있습니다.

```java
public class RestaurantSafety implements FoodSafety {
    // regularInspection 메서드를 재정의하지 않음
    // 나머지 메서드들을 구현...
}
```



이렇게 함으로써 새로운 기능을 추가하거나 인터페이스를 확장할 때 기존 코드를 수정하지 않고도 기능을 확장할 수 있습니다.


 

즉, static은 인터페이스 자체에서 불러올 수 있고, default는 해당 인터페이스를 구현한 class에서 기본적으로 사용할 수 있다 정도의 차이인것 같습니다... 

default 로 구상 메소드를 넣을 수 있도록 한 이유

  • 사용되던 인터페이스에 새로운 기능을 추가해야 한다면?
    • 새로운 자바 버전의 라이브러리 인터페이스에 새 기능이 추가되어야 한다면?
    • 이를 적용하여 사용하던 클래스가 매우 많을 경우…
  • 해당 인터페이스의 하위 클래스들을 일일이 수정하지 않아도 되도록

하기 위해서입니다.

728x90