Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 인터페이스의 전용(Private) 메소드 활용법

Java 9부터 인터페이스 내부에 전용(private) 메소드를 정의할 수 있게 되었습니다. 이를 통해 default 메소드와 static 메소드 간에 코드를 공유하면서 중복을 줄이고 캡슐화를 강화할 수 있습니다.

예제 코드

interface my_int{
    public abstract void multiply_vals(int a, int b);
    public default void add_vals(int a, int b){
        sub_vals(a, b);
        System.out.print("Default method result ");
        System.out.println(a + b);
    }
    private void sub_vals(int a, int b){
        System.out.print("Private method result ");
        System.out.println(a - b);
    }
    private static void div(int a, int b){
        System.out.print(" Private static method result ");
        System.out.println(a / b);
    }
}
public class my_new_int implements my_int{
    @Override
    public void multiply_vals(int a, int b){
        System.out.print("Abstract method result ");
        System.out.println(a * b);
    }
    public static void main(String[] args){
        my_int in = new my_new_int();
        in.multiply_vals(11, 34);
        in.add_vals(78, 0);
    }
}

실행 결과

Abstract method result 374
Private method result 78
Default method result 78

코드 설명

먼저 my_int라는 이름의 인터페이스가 정의됩니다. 이 인터페이스에는 본문(body)이 없는 추상 메소드 multiply_vals가 포함되어 있습니다.

또한 두 수를 더하는 add_vals라는 default 메소드가 정의되어 있습니다. 이 메소드는 내부적으로 전용 메소드인 sub_vals를 호출하여 두 수의 차를 출력한 뒤, 덧셈 결과를 출력합니다.

그리고 두 수를 나누는 div라는 전용 정적(private static) 메소드도 함께 정의되어 있습니다. Java 9에서는 이처럼 일반 전용 메소드와 전용 정적 메소드 모두 인터페이스 안에서 사용할 수 있습니다.

다음으로 my_new_int 클래스가 앞서 정의한 인터페이스를 구현(implements)합니다. 이 클래스는 곱셈을 수행하는 추상 메소드를 오버라이드하여 재정의합니다.

main 메소드에서는 인터페이스 타입의 인스턴스를 생성한 후, 특정 값을 전달하며 multiply_vals 메소드를 호출합니다. 마찬가지로 add_vals 메소드도 값을 전달하여 호출하며, 각 메소드의 실행 결과가 콘솔에 순서대로 출력됩니다.

핵심 포인트

  • Java 9 이전에는 인터페이스의 default 메소드 간 코드 중복을 피할 방법이 없었지만, 전용 메소드 도입으로 해결되었습니다.
  • 전용 메소드는 인터페이스 외부나 구현 클래스에서 호출할 수 없으며, 오직 인터페이스 내부의 default 또는 static 메소드에서만 접근 가능합니다.
  • 전용 정적 메소드는 다른 정적 메소드와 default 메소드에서 호출할 수 있습니다.