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

Java 9 인터페이스에서 private 메서드와 private static 메서드 활용하기

네, Java 9부터는 인터페이스(interface) 안에 private 메서드private static 메서드를 정의할 수 있습니다. 이 기능은 인터페이스 내부의 코드 중복을 제거하고 캡슐화를 강화하기 위해 도입되었습니다.

private 메서드는 해당 인터페이스 내부에서만 접근할 수 있으며, 이를 구현하는 클래스나 다른 인터페이스에서는 접근하거나 상속할 수 없습니다. 즉, 외부로 노출되지 않으면서 인터페이스 내부의 보조 로직을 담당하는 역할을 합니다.

주요 특징

  • 일반 private 메서드는 같은 인터페이스의 default 메서드에서만 호출할 수 있습니다.
  • private static 메서드는 static 메서드와 다른 private static 메서드에서 호출할 수 있습니다.
  • private 메서드는 구현 클래스에서 오버라이드할 수 없습니다.
  • abstract 메서드에는 private 접근 제한자를 사용할 수 없습니다.

문법(Syntax)

interface <인터페이스명> {
    private static void methodName() {
        // 실행문
    }
    private void methodName() {
        // 실행문
    }
}

예제 코드

interface Java9Interface {
    public abstract void method1();

    public default void method2() {
        method4();
        method5();
        System.out.println("default 메서드 내부");
    }

    public static void method3() {
        method5();   // static 메서드 안에서 다른 static 메서드 호출
        System.out.println("static 메서드 내부");
    }

    private void method4() {          // private 메서드
        System.out.println("private 메서드 내부");
    }

    private static void method5() {   // private static 메서드
        System.out.println("private static 메서드 내부");
    }
}

public class PrivateStaticMethodTest implements Java9Interface {
    @Override
    public void method1() {
        System.out.println("추상 메서드 내부");
    }

    public static void main(String args[]) {
        Java9Interface instance = new PrivateStaticMethodTest();
        instance.method1();
        instance.method2();
        Java9Interface.method3();
    }
}

실행 결과

추상 메서드 내부
private 메서드 내부
private static 메서드 내부
default 메서드 내부
private static 메서드 내부
static 메서드 내부

동작 원리

위 예제에서 default 메서드인 method2()는 private 메서드인 method4()와 private static 메서드인 method5()를 모두 호출할 수 있습니다. 반면 static 메서드인 method3()은 private static 메서드인 method5()만 호출 가능합니다. 일반 private 메서드는 인스턴스 컨텍스트가 필요하기 때문에 static 메서드에서 직접 호출할 수 없습니다.

정리

Java 8에서 default 메서드와 static 메서드가 도입되면서 인터페이스 내부에서도 공통 로직을 여러 메서드마다 반복 작성해야 하는 문제가 발생했습니다. Java 9의 private 메서드는 이러한 중복 코드를 하나의 메서드로 묶어 재사용성과 가독성을 크게 높여주며, 인터페이스의 내부 구현 세부 사항을 외부로부터 완전히 숨길 수 있게 해줍니다.