English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java 8 인터페이스의 기본 메서드가 추가되었습니다.
간단히 말해서, 기본 메서드는 인터페이스가 구현 메서드를 가질 수 있으며, 구현 클래스가 메서드를 구현하지 않아도 됩니다.
기본 메서드를 구현하려면 메서드 이름 앞에 default 키워드를 추가하면 됩니다.
이 특성이 필요한 이유는 무엇인가요?
먼저, 이전 인터페이스는 양면의 날카로운 도구였습니다. 장점은 추상화에 대한 방향이 아니라 구체화에 대한 방향이었으며, 단점은 인터페이스를 수정할 때에는 모든 인터페이스를 구현한 클래스를 수정해야 했습니다. 현재의 java 8 이전의 컬렉션 프레임워크에는 foreach 메서드가 없었으며, 일반적으로 JDK에 관련 인터페이스에 새로운 메서드와 구현을 추가하는 방법을 생각할 수 있습니다. 그러나, 이미 출시된 버전에서는 인터페이스에 새로운 메서드를 추가하면서 기존 구현에 영향을 미치지 않도록 할 수 없기 때문에 기본 메서드가 도입되었습니다. 그들의 목적은 인터페이스의 수정과 기존 구현 간의 불일치 문제를 해결하는 것입니다.
기본 메서드 문법 형식은 다음과 같습니다:
public interface Vehicle { default void print(){ System.out.println("저는 차량입니다!"); } }
인터페이스에 기본 메서드가 있을 때, 하나의 클래스가 여러 인터페이스를 구현하며 이 인터페이스들이 같은 기본 메서드를 가지고 있다면, 다음 예제는 이러한 상황의 해결책을 설명합니다:
public interface Vehicle { default void print(){ System.out.println("저는 차량입니다!"); } } public interface FourWheeler { default void print(){ System.out.println("저는 네륜차입니다!"); } }
첫 번째 해결책은 자신의 기본 메서드를 생성하여 인터페이스의 기본 메서드를 덮어쓸 수 있습니다:
public class Car implements Vehicle, FourWheeler { default void print(){ System.out.println("저는 네륜차입니다!"); } }
두 번째 해결책은 super를 사용하여 지정된 인터페이스의 기본 메서드를 호출할 수 있습니다:
public class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); } }
Java 8 또한 인터페이스는 선언할 수 있으며 (또는 구현할 수 있습니다). 예를 들어:
public interface Vehicle { default void print(){ System.out.println("저는 차량입니다!"); } // 정적 메서드 static void blowHorn(){ System.out.println("빵소리!!!"); } }
다음 코드를 통해 기본 메서드의 사용에 대해 이해할 수 있습니다. 코드를 Java에 넣을 수 있습니다.8Tester.java 파일에서:
public class Java8Tester { public static void main(String args[]){ Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print(){ System.out.println("저는 차량입니다!"); } static void blowHorn(){ System.out.println("빵소리!!!"); } } interface FourWheeler { default void print(){ System.out.println("저는 네륜차입니다!"); } } class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("저는 차량입니다!"); } }
위의 스크립트를 실행하면, 출력 결과는 다음과 같습니다:
$ javac Java8Tester.java $ java Java8Tester 저는 차량입니다! 저는 네륜차입니다! 빵소리!!! 저는 차량입니다!