Kotlin의 class에 대하여 알아보기 3

오늘은 코틀린에서의 접근 권한에 대하여 알아보겠습니다.

접근 권한

private은 접근 범위가 현재 클래스에 한정되고, protected는 현재 클래스와 상속 받은 클래스, internal는 모듈만 접근할 수 있습니다.

당연히 public은 접근범위가 모든 범위이며, 접근 지정자를 지정하지 않을 경우에는 기본적으로 public입니다.

보통은 private과 public을 주로 사용한다고 합니다.

private

private을 적용한 예시로는 아래와 같으며, private으로 클래스안에서 보호할 수 있습니다.

interface Itest{
    fun TestInterface()
}

private class test():Itest{
    private var name : String = "test"
    private var a : Int = 1
    private var b : Int = 2
    fun sum():Int{
        return a + b
    }
    override fun TestInterface(){
        println("interface")
    }
}

fun main(args: Array<String>) {
    var real = test()
    var result = real.sum();
    println(result)
//     println(real.name)
}

protected

protected를 적용한 예시로는 아래와 같습니다.

상속받지 못한 함수에서는 값을 읽지 못합니다.

interface Itest{
    fun TestInterface()
}

open class test():Itest{
    open var name : String = "test"
    protected var a : Int = 1
    protected var b : Int = 2
    open fun sum():Int{
        return a + b
    }
    override fun TestInterface(){
        println("interface")
    }
}

class test2() : test(){
    override var name : String = "test2"
}

fun main(args: Array<String>) {
    var real = test2()
    var result = real.sum();
    println(result)
//     println(real.a)
}

internal

internal을 적용한 예시는 아래와 같습니다.

이전의 private과 protected은 상속받지 못한 다른 함수에서 접근하지 못했지만, internal 접근 지정자는 모듈내로는 자유롭게 접근가능 합니다.

interface Itest{
    fun TestInterface()
}

open class test():Itest{
    open var name : String = "test"
    internal var a : Int = 1
    internal var b : Int = 2
    open fun sum():Int{
        return a + b
    }
    override fun TestInterface(){
        println("interface")
    }
}

class test2() : test(){
    override var name : String = "test2"
}

fun main(args: Array<String>) {
    var real = test2()
    var result = real.sum();
    println(result)
    println(real.a)
    println(real.b)
}

public

public을 적용한 예시는 아래와 같으며, public이라고 지정하지 않아도 자동으로 public으로 처리되는 특징이 있습니다.

모두에게 열려있는 접근 지정자입니다.

public class test(){
    var name : String = "test"
    public var a : Int = 1
    public var b : Int = 2
    public fun sum():Int{
        return a + b
    }
}

fun main(args: Array<String>) {
    var real = test()
    var result = real.sum();
    println(result)
    println(real.a)
    println(real.b)
}
Written on May 9, 2018