[JAVA] JAVA8에서의 Interface

JHJeong·2024년 4월 10일
0
post-custom-banner

JAVA8에서 인터페이스와 관련해 크게 변화된 점은 바로 디폴트 메서드(Default Methods)와 정적 메서드(Static Methods)를 인터페이스 내에 추가할 수 있게 된 것이다. 이러한 변경은 JAVA의 인터페이스에 더 많은 유연성을 부여하고, 람다 표현식와 함께 함수형 프로그래밍을 지원하는데 중요한 역할을 한다.

Default Methods

디폴트 메서드는 인터페이스에 새로운 기능을 추가하면서도 기존에 이 인터페이스를 구현한 클래스들이 해당 메서드를 구현하지 않아도 되게 하는 방법을 제공한다. 이는 기존 코드를 변경하지 않고도 인터페이스를 확장할 수 있게 해준다. 예를 들어, Vehicle 인터페이스에 stop이라는 새로운 디폴트 메서드를 추가할 때, Car 클래스는 이 메서드를 구현하지 않아도 Vehicle의 디폴트 구현을 사용할 수 있게 한다.

interface Vehicle {
    // 추상 메서드
    void start();

    // 디폴트 메서드
    default void stop() {
        System.out.println("Vehicle stopped.");
    }
}

class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("Car started.");
    }
    // stop() 메서드는 구현하지 않아도 된다. 
    // Vehicle 인터페이스의 디폴트 구현을 사용할 수 있다.
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.start();
        myCar.stop(); // - 디폴트 메서드 호출
    }
}

출력 결과
Car started.
Vehicle stopped.

Static Methods

JAVA8부터는 인터페이스 내에 정적 메서드를 정의할 수 있게 되었다. 이는 인터페이스를 구현하지않고도 인터페이스 이름으로 직접 호출할 수 있다는 것을 의미한다. 이는 유틸리티 함수나 헬퍼 메서드를 인터페이스 내에 포함시킬 수 있게 해준다. 아래 소스는 MathOperations 인터페이스에서 add와 subtract라는 두 개의 정적 메서드를 정의하였을 때, 이 메서드들은 인터페이스를 구현한 클래스의 인스턴스 없이도 호출하는 소스를 보여준다.

interface MathOperations {
    static int add(int a, int b) {
        return a + b;
    }

    static int subtract(int a, int b) {
        return a - b;
    }
}

public class Main {
    public static void main(String[] args) {
        int sum = MathOperations.add(5, 3);
        int difference = MathOperations.subtract(5, 3);
        System.out.println("Sum: " + sum);
        System.out.println("Difference: " + difference);
    }
}

출력결과
Sum: 8
Difference: 2

이러한 변화는 JAVA 에서 함수형 프로그래밍을 지원하고, 인터페이스의 활용도를 높이는 중요한 변화라고 할 수 있다. 디폴트 메서드와 정적 메서드의 추가로 JAVA 개발자들을 더욱 유연하고 강력한 코드를 작성할 수 있게 되었다.

profile
이것저것하고 싶은 개발자
post-custom-banner

0개의 댓글