EEALL@ONCE
☕인터페이스에 `static` 메서드와 `default` 메서드 : java 8 이후 본문
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
'언어💻 > 자바☕' 카테고리의 다른 글
☕ "팩토리 패턴(Factory Pattern)" : 예제 (0) | 2024.01.03 |
---|---|
☕Java 스트림과 Collectors의 groupingBy 및 reducing 메서드 (1) | 2023.11.29 |
☕Collectors : 유틸리티 클래스 (java stream api) 컬렉션 연산 수행자 (0) | 2023.11.29 |
☕ 추상클래스와 인터페이스의 차이는 뭘까? (1) | 2023.11.27 |
☕ FUNCTIONAL INTERFACE : @FunctionalInterface (0) | 2023.11.20 |