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

자바 9(Java 9)에서 인터페이스에 프라이빗 메서드가 도입된 이유

자바 8(Java 8)부터 인터페이스는 디폴트(default) 메서드를 지원하기 시작했습니다. 그런데 여러 디폴트 메서드에서 동일한 로직이 반복되는 경우가 종종 발생합니다. 이럴 때 코드 재사용성을 높이기 위해 공통 로직을 별도의 디폴트 메서드로 분리해 작성할 수 있습니다.

하지만 문제는 공통 코드가 외부에 노출되어서는 안 되는 기밀성 있는 코드일 때 발생합니다. 디폴트 메서드는 본질적으로 public이기 때문에, 해당 인터페이스를 구현하는 모든 클래스가 접근할 수 있습니다. 즉, 숨기고 싶은 코드를 디폴트 메서드에 두는 것은 바람직하지 않습니다.

이러한 한계를 해결하기 위해 자바 9(Java 9)부터는 인터페이스 내부에 프라이빗(private) 메서드를 정의할 수 있게 되었습니다. 프라이빗 메서드는 해당 인터페이스 내부에서만 접근할 수 있으므로, 구현 클래스나 외부로부터 감춰야 하는 기밀 코드를 안전하게 캡슐화할 수 있습니다. 이것이 바로 인터페이스에 프라이빗 메서드가 추가된 핵심적인 이유입니다.

문법(Syntax)

private void methodName() {
    // 실행할 문장들
}

예제(Example)

아래 예제에서는 디폴트 메서드 multiply()가 내부적으로 프라이빗 메서드 division()을 호출하는 구조를 보여줍니다.

interface Operation {
    default void addition() {
        System.out.println("default method addition");
    }

    default void multiply() {
        division();
        System.out.println("default method multiply");
    }

    // 프라이빗 메서드: 인터페이스 내부에서만 호출 가능
    private void division() {
        System.out.println("private method division");
    }
}

class PrivateMethodTest implements Operation {
    public static void main(String args[]) {
        PrivateMethodTest test = new PrivateMethodTest();
        test.multiply();
    }
}

실행 결과(Output)

private method division
default method multiply

정리

  • 디폴트 메서드 간 중복 코드를 제거하고 재사용성을 높일 수 있습니다.
  • 외부에 노출되면 안 되는 헬퍼(helper) 로직을 안전하게 숨길 수 있습니다.
  • 인터페이스의 캡슐화 수준이 향상되어 더 깔끔하고 유지보수하기 쉬운 설계가 가능합니다.