코틀린(Kotlin)

코틀린(kotlin) : 접근 제한자 - private, protected, internal, public

알통몬_ 2018. 1. 31. 09:00
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 코틀린의 접근 제한자에 대해서 공부합니다.

코틀린에서는 클래스, 객체, 인터페이스, 생성자, 메서드, 프로퍼티 그리고 setter 가 접근 제한자

를 가질 수 있고 getter 같은 경우는 프로퍼티의 접근 제한자와 같은 제한을 가집니다.


총 4개의 접근 제한자가 존재합니다. 

private

protected

internal

public 

아무 접근 제한자도 선언하지 않으면 기본 값으로 public 접근 제한자를 가집니다.


패키지 

클래스, 메서드, 프로퍼티, 객체, 인터페이스는 

패키지 내부에 Top-level에 직접 선언 가능합니다.

Top-level 에 선언 시

public : 어디에서나 사용 가능합니다.

private : 해당 .kt 파일 내부에서만 사용 가능합니다.

internal : 같은 모듈 안이라면 어디서든 사용 가능합니다.

protected : Top-level에 protected 접근 제한자는 사용할 수 없습니다.


private fun AAA() {
print("private method AAA()")
}

public var aaa : Int = 10
private set

internal val bbb = 100

fun main(args: Array<String>) {
AAA()
aaa
bbb
}

* public 접근 제한을 가진 것들을 다른 패키지에서 사용하려는 경우에는

import 해서 사용해야 합니다.


클래스와 인터페이스의 멤버들의 접근 제한

private : 해당 클래스 or 인터페이스 내부에서만 사용 가능.

protected : private + subclass 에서까지 사용 가능.

internal : 같은 모듈에서 사용 가능.

public : 어디서든 사용가능.


자바 개발자들을 위한 내용 :

코틀린에서 외부 클래스는 내부 클래스의 private 멤버를 사용할 수 없습ㄴ;디.


만약 protected 멤버를 오버라이딩하고 오버라이딩 한 멤버에 따로 접근 제한자를 

선언하지 않았다면, protected 접근 제한을 가집니다.


아래 클래스들을 보면 org.mon.altong 패키지에 있습니다.

package org.mon.altong

open class Out {

private val aaa = 10
protected open val bbb = 20
internal val ccc = 30
val ddd = 40

protected class In {
public val e = 50
}
}
class Other : Out() {
init {
println(aaa)
println(bbb)
println(ccc)
println(ddd)
val i = In()
println(i.e)
}

// 얘는 protected
override val bbb: Int = 22
}

class Other2(o : Out) {
init {
println(o.aaa)
println(o.bbb)
println(o.ccc)
println(o.ddd)
val i = o.In()
println(i.e)
}

}

아래 코드를 보면 상속 받은 경우와 파라미터로 받은 경우를 비교해 볼 수 있습니다.

            


생성자

생성자에는 private, public, internal 접근 제한을 줄 수 있고,

접근 범위는 위에 것들과 같습니다.

클래스나 메서드에 선언된 로컬 변수들은 접근 제한자를 가질 수 없습니다.


이상입니다.


감사합니다.



반응형