Interface에는 왜 protected 접근지정을 사용할 수 없을까?

    Java에서 protected 접근 지정자는 멤버를 클래스 내부 또는 동일 패키지에 속한 클래스와 하위(sub) 클래스에 공개한다.

    protected는 특히 super class의 멤버를 sub class에서 재사용하거나 오버라이딩 할 때 많이 사용한다.

    상속에서 강력한 기능인 protected를 인터페이스에서는 사용할 수 없다.

    그 이유를 알아보자.

     

    사실 인터페이스에서 protected를 사용하지 못 하도록 하는 것에는 절대적인 이유라기 보단, 언어설계적인 이유가 크다.

    이는 인터페이스의 목적과 큰 연관이 있는데, 인터페이스는 다른 클래스들에게 특정 메서드의 프로토콜을 제공하는 것을 목표로 한다.

    즉, 이를 구현하는 여러 클래스에서 공통된 이름으로 서로 다른 일을 할 수 있는 메서드의 원형을 제공한다.

    이러한 특성으로 인해 인터페이스는 다른 클래스가 해당 인터페이스를 구현하는 방식에 대한 세부 정보에는 관심이 없어야 한다.

    이것이 바로 protected 지정자를 사용하지 못 하도록 만든 이유이다.

    따라서 인터페이스는 기본적으로 모든 멤버를 public으로 선언하여 외부에 공개하고, 필요하다면 sub class에서 접근 범위를 제한하도록 한다.

     

    이와 같은 규칙을 지키면서 sub class들에게 protected 접근지정을 강제해야 한다면 어떻게 해야할까?

    우린 이미 이에 대한 답을 가지고 있다. 바로 추상클래스를 이용하는 것이다.

    추상클래스는 당연하게도 protected 메서드를 포함할 수 있으므로, 이를 이용하면 인터페이스를 구현하는 클래스가 해당 추상 클래스를 상속하여 메서드를 사용하도록 만들  있다.

    '코딩 > [JAVA]' 카테고리의 다른 글

    @Transactional 안에서 LazyInitializationException, JPQL @Modifying  (0) 2024.05.29
    접근 지정자 비교하기  (0) 2023.06.18
    이것이 자바다. 3~4  (0) 2022.11.17
    [JAVA] 이것이 자바다.1-2  (0) 2022.11.08

    댓글