java 8부터는 default 키워드를 사용하면 인터페이스 내에서도 메서드의 구현을 포함할 수 있다.
public interface ColorRepository {
// 기존 방식 (쿼리 실행을 위한 선언)
@Query(value = "SELECT ...", nativeQuery = true)
Optional<ColorDto> findByIdAndLangCd(@Param("id") Long id, @Param("language") String language);
// default 메서드 사용하기
default Optional<ColorDto> findById(Long id) {
return findByIdAndLangCd(id, "en"); // 기본값 "en" 적용
}
}
default 키워드의 역할
- 인터페이스 내에서 메서드 구현을 허용한다.
- 인터페이스를 구현하는 모든 클래스에서 해당 메서드를 직접 구현할 필요가 없다.
- 기본 메서드를 오버라이드할 수도 있어서 유연성이 높다.
인터페이스의 default 메서드가 도입된 이유
- Java 7 이전에는 interface 에 abstract 메서드만 가질 수 있었다.
- 따라서 인터페이스에 메서드를 추가하면, 기존의 모든 구현 클래스가 이를 구현해야 하는 문제가 있었다.
- Java 8 이후로 default 메서드를 interface 에 선언함으로써, 인터페이스를 구현하는 클래스가 새로 추가되는 메서드를 구현할 필요가 없어지게 되어 편의성이 좋아지게 되었다.
실제로 Java 8 SE 부터 등장한 stream API 는 Collection 에서 모두 활용가능하게 지원되었는데, 기존의 List, Set 같은 컬렉션이 직접 구현하지 않더라도 활용할 수 있게 되었다는 큰 의미를 가지고 있다.
Stream 자체에 관한 문서는 여기 있다.
interface 에 default 메서드, static 메서드를 선언하는 예시는 여기 있다.
'개발 > TIL' 카테고리의 다른 글
단 한 줄로 spring boot 애플리케이션 성능 올리기 - gzip (0) | 2025.02.21 |
---|---|
Java의 Optional<T>로 안전하게 null 데이터 처리하기 (0) | 2025.02.20 |
JpaRepository 에서 deleteAllInBatch 로 효율적인 삭제하기 (feat. vs deleteAll) (1) | 2025.02.18 |
SQL 엔진에서 JOIN 을 수행하는 원리 (MySQL) (0) | 2025.02.17 |
CI/CD 방식과 각 장/단점 (0) | 2025.02.16 |