[kotlin] 코틀린에서 인터페이스의 접근 제어자 설정하기

코틀린에서 인터페이스는 클래스와 다르게 필드나 메소드의 구현을 가지지 않는다. 그렇기 때문에 접근 제어자를 설정하는 것은 의미가 없을 수 있다고 생각할 수 있다. 하지만 인터페이스의 접근 제어자는 해당 인터페이스를 사용하는 다른 클래스나 인터페이스에 대한 접근을 제어하는데 사용된다.

인터페이스의 접근 제어자는 기본적으로 public으로 설정되어 있다. 이는 인터페이스를 어디서든 접근할 수 있도록 하는 것을 의미한다. 하지만 때때로 인터페이스를 특정한 패키지나 클래스 내에서만 사용하고 싶을 수 있다. 이럴 때는 접근 제어자를 수정하여 해당 요구사항을 충족시킬 수 있다.

접근 제어자 설정하기

인터페이스의 접근 제어자를 설정하기 위해서는 interface 키워드 뒤에 접근 제어자를 명시해주면 된다. 예를 들어, 인터페이스가 특정 패키지 내에서만 접근 가능하도록 제한하려면 internal 접근 제어자를 사용할 수 있다. 다음은 이 예시를 보여준다.

internal interface MyInterface {
    fun myMethod()
}

위의 코드에서 MyInterfaceinternal로 선언되었기 때문에, 이 인터페이스는 같은 모듈 내에서만 접근할 수 있다. 다른 모듈에서는 이 인터페이스에 접근할 수 없다.

접근 제어자 상속하기

인터페이스에서 상속받은 클래스나 인터페이스의 접근 제어자는 인터페이스와 동일하거나 더 강한 접근 제어자로 제한될 수 있다. 예를 들어, 부모 인터페이스가 internal로 선언되었다면, 자식 클래스나 인터페이스도 internal 이거나 public으로만 선언할 수 있다.

internal interface ParentInterface {
    fun myMethod()
}

// ParentInterface을 상속 받은 ChildInterface
interface ChildInterface : ParentInterface

// ChildInterface은 internal로 제한된다.

위의 코드에서 ChildInterfaceParentInterface를 상속 받았으므로, internal 접근 제어자를 가진다. 만약 ChildInterfacepublic으로 선언하려고 한다면, ParentInterface 역시 public으로 선언되어야 한다.

결론

코틀린에서 인터페이스의 접근 제어자를 설정하는 것은 해당 인터페이스를 사용하는 다른 클래스나 인터페이스에 대한 접근을 제어하는데 사용된다. internal 접근 제어자를 사용하여 해당 인터페이스를 특정한 패키지나 클래스 내에서만 사용할 수 있도록 제한할 수 있다. 또한, 인터페이스에서 상속받은 클래스나 인터페이스의 접근 제어자는 인터페이스와 동일하거나 더 강한 접근 제어자로 제한된다.

참고 자료