한 걸음 두 걸음

JAVA 자바] inner interface 중첩인터페이스 본문

Language/Java

JAVA 자바] inner interface 중첩인터페이스

언제나 변함없이 2019. 12. 24. 13:00
반응형

인터페이스란?

인터페이스란 추상클래스의 확장개념으로, 서비스 공급자(서버)와 사용자(클라이언트)간의 계약을 표현하는 것입니다.
인터페이스의 모든 필드(변수)는 모두 final static이 붙은 상수로 간주됩니다.(생략되어 표시되지 않습니다.)
메소드는 추상메소드만 구현할 수 있었으나, JAVA9부터는 구현메소드와 정적메소드, private 메소드가 작성될 수 있게 되었습니다.(private메소드는 default메소드에서 호출하여 사용할 수 있습니다.)

중첩인터페이스

public interface MainConstants {
    //inner interface (중첩 인터페이스)
    interface View{
        void showResult(int result);
    }
}

이처럼 인터페이스 내부에 또 다른 인터페이스를 사용하는 것으로, JAVA의 특성인 캡슐화를 강화하며, 인터페이스를 논리적으로 묶어 사용하기 위해 이처럼 중첩 인터페이스를 사용합니다. 논리적으로 용도가 비슷한 인터페이스끼리 묶여있으므로, 코드의 가독성이 좋아집니다.

이를 이해하기 위해서는 중첩 클래스와 비교를 해야할 필요가 있습니다.

class A {
    private int x; 
    //1. static 내부클래스
    static class B {
        void showX(){
            System.out.println(new A().x+"");
        }
    }
    //2. 일반 내부클래스
    class C{
        void showX(){
            System.out.println(x+"");
        }
    }
}

내부클래스 특성상 자신의 외부에 있는 클래스 A의 모든 것들에 접근할 수 있습니다. 하지만 static클래스의 경우 static인 것에만 접근할 수 있기 때문에 A클래스를 인스턴스화시켜서 x에 접근할 수 있는 반면, 일반 내부클래스는 바로 접근이 가능하기 때문에 x로 접근합니다.

하지만 인터페이스는 모두 final static이 붙은 상수로 간주됩니다. 그렇기 때문에 모두 static한 친구들이고, 인터페이스 특성상 인스턴스화 시킬 수 없기 때문에

public interface MainConstants {
    //inner interface (중첩 인터페이스)
    interface View{
        void showResult(int result);
    }

    void clear();
}

위와 같은 중첩인터페이스가 있을 경우 사용은 다음과 같이 할 수 있습니다.

class A implements MainConstants{
    void clear(){
        //clear구현내용
    }

    class B implements MainConstants.View{
            void showResult(int result){
                //showResult 구현 내용
            }
    }

}

레퍼런스 : https://dzone.com/articles/what-inner-interface-java

반응형