[kotlin] 코틀린에서의 접근 제한자를 사용하여 인터페이스를 구현할 때 제약사항은 무엇인가요?

일반적으로 인터페이스의 멤버 함수를 구현할 때, 구현된 함수의 접근 제한자가 인터페이스의 해당 함수의 접근 제한자보다 더 강하거나 같아야 합니다. 즉, 인터페이스의 함수가 public으로 선언되었다면 해당 함수를 구현할 때 protectedprivate으로 선언할 수 없습니다.

아래의 예제를 통해 살펴보겠습니다.

interface MyInterface {
    fun doSomething()
}

class MyClass : MyInterface {
    // 올바른 예제 - 함수의 접근 제한자를 확장할 수 있습니다.
    public override fun doSomething() {
        println("Doing something")
    }
}

class MySubClass : MyInterface {
    // 잘못된 예제 - 함수의 접근 제한자를 축소할 수 없습니다.
    private override fun doSomething() {
        println("Doing something")
    }
}

위의 코드에서 interfacedoSomething 함수는 public으로 선언되었기 때문에 해당 함수를 구현할 때 접근 제한자를 private으로 변경할 수 없습니다.

따라서, 코틀린에서의 접근 제한자를 사용하여 인터페이스를 구현할 때는 해당 제약을 염두에 두어야 합니다.