KSCOLD LogoKSCOLD
Blog
Feed
Product
Admin Night
Vault
Guestbook
Info

Vault 목록

디폴트 메서드(Default Method)

연결된 노트와 함께 읽기

디폴트 메서드(Default Method)

2024년 1월 25일
  • 인터페이스(Interface)는 기능에 대한 선언만 가능하기 때문에, 실제 코드를 구현한 로직은 포함될 수 없다.

  • 하지만 Java 8에서 부터 Default Method(디폴트 메소드)추가 되었는데 메서드(Method) 선언 시에 default를 명시하게 되면 인터페이스 내부에서도 로직이 포함된 메서드(Method)드를 선언할 수 있다.

  • 따라서 default method는 인터페이스(Interface)에 있는 구현 메서드(Method)를 의미한다.

  • 인터페이스의 default method는 default라는 키워드를 명시해야 하고, 구현부 {} 가 있어야 한다.

Java
  • 위와 같이 default라는 키워드를 메서드에 명시하게 되면 인터페이스 내부라도 코드를 작성할 수 있다.

왜 사용할까?

  • 사실 인터페이스는 기능에 대한 구현보다는, 기능에 대한 '선언'에 초점을 맞추어서 사용한다.

  • 즉, 하위 호환성 때문에 사용한다.

  • 예를 들어 설명하자면, 여러분들이 만약 오픈 소스코드를 만들었다고 가정하자.

  • 그 오픈소스가 엄청 유명해져서 전 세계 사람들이 다 사용하고 있는데, 인터페이스에 새로운 메서드를 만들어야 하는 상황이 발생했다.

  • 자칫 잘못하면 내가 만든 오픈소스를 사용한 사람들은 전부 오류가 발생하고 수정을 해야 하는 일이 발생할 수도 있다.

  • 이럴 때 사용하는 것이 바로 default 메서드다.

  • 기존에 존재하던 인터페이스를 이용하여서 구현된 클래스를 만들고 사용하고 있는데 인터페이스를 보완하는 과정에서 추가적으로 구현해야 할 혹은 필수적으로 존재해야 할 메서드가 있다면, 이미 이 인터페이스를 구현한 클래스와의 호환성이 떨어 지게 된다.

  • 이러한 경우 default 메서드를 추가하게 된다면 하위 호환성은 유지되고 인터페이스의 보완을 진행 할 수 있다.

  • 실제로 스프링 프레임 워크 버전 4에서 WebMvcConfigure라는 인터페이스를 구현한 클래스 WebMvcConfigurerAdapter를 사용하였지만 자바8에서 default 메소드가 등장하고 WebMvcConfigurerAdapter클래스는 더 이상 사용되지 않게 되었다.

예시

Java

Synapse Map Insight

interface MyInterface { default void printHello() { System.out.println("Hello World"); } }
interface MyInterface { default void printHello() { System.out.println("Hello World"); } } class MyClass implements MyInterface {} public class DefaultMethod { public static void main(String[] args) { MyClass myClass = new MyClass(); myClass.printHello(); //실행결과 Hello World 출력 } }