공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 코틀린의 접근 제한자에 대해서 공부합니다.
코틀린에서는 클래스, 객체, 인터페이스, 생성자, 메서드, 프로퍼티 그리고 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 접근 제한을 줄 수 있고,
접근 범위는 위에 것들과 같습니다.
클래스나 메서드에 선언된 로컬 변수들은 접근 제한자를 가질 수 없습니다.
이상입니다.
감사합니다.
'코틀린(Kotlin)' 카테고리의 다른 글
코틀린(kotlin) : Data Class 와 Sealed Class (0) | 2018.01.31 |
---|---|
코틀린(kotlin) : 확장 Extension (0) | 2018.01.31 |
코틀린(kotlin) : 인터페이스 Interface (0) | 2018.01.30 |
코틀린(kotlin) : 프로퍼티와 필드 Properties and Fields (0) | 2018.01.30 |
코틀린(kotlin) : 클래스와 상속 class and inheritance (0) | 2018.01.29 |