본문 바로가기

Programming/JAVA

중첩 클래스&인터페이스(1)

java logo image

 

 

 

기본적으로 OOP에서는 여러 클래스들이 서로 밀접한 관계를 맺고, 다양한 상호작용을 하게 됩니다. 광범위하게 사용되는 클래스도 있고, 한정된 클래스끼리 특수한 관계를 맺기도 합니다. 지금까지 우리는 대부분의 클래스를 독립적으로 작성해 오는 것을 당연하게 여겼는데, 이러한 클래스들은 여러 가지 클래스끼리 관계를 맺기 때문이었습니다. 

 

하지만 어떤 클래스가 특정 클래스만 특수한 관계를 맺는 경우에는, 해당 클래스를 클래스 내부에 다시 선언하는 경우가 있습니다. 이렇게 클래스 내부에 선언한 클래스를 중첩 클래스(Nested Class)라고 합니다.

 

이렇게 중첩 클래스를 사용하게 되는 경우, 클래스간의 멤버에 쉽게 접근이 가능하면서 동시에 외부와의 불필요한 클래스 관계를 방지하게 되면서 코드 작성에 있어서 효율화를 꾀할 수 있습니다. 또한, 인터페이스 역시 클래스 내부에 선언하는 방식으로 생성이 가능합니다. 이 역시 구현 클래스를 선언할 때, 해당 인터페이스를 포함하는 클래스와 밀접한 연관을 맺기 위해서 선언하게 됩니다. 

 

class ClassName {
    class NestedClass {
    }
}

 

class ClassName {
    interface NestedInterfaceName {
    }
}

 

대표적인 중첩 인터페이스의 경우, 안드로이드 프로그래밍 과정에서 UI 이벤트 처리 시 많이 활용하게 됩니다. 안드로이드에서 사용하는 View 클래스의 경우, View 클래스의 클릭 이벤트를 처리하는 구현 클래스를 만들기 위해서 View 클래스 안에 중첩 인터페이스 형식으로 OnClickListener가 선언되어 있습니다. 

 

public class View {
    public interface OnClickListener {
        public void onClick(View v);
        }
    }
}