개발/TIL

default 를 이용해서 interface 에 메서드 정의하기

ebang 2025. 2. 19. 22:40

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 메서드를 선언하는 예시는 여기 있다.