기록

[코틀린/Kotlin] 접근범위와 접근제한자 본문

[Study]/Kotlin

[코틀린/Kotlin] 접근범위와 접근제한자

Dannnnnn 2022. 5. 6. 20:18
반응형

변수나 함수, 클래스의 '공용 범위'를 제어하는 단위인 스코프와, 스코프 외부에서 스코프 내부로의 접근을 제한하는 접근제한자에 대해 알아보자.

1.  스코프

변수나 함수, 클래스와 같은 멤버들을 서로 공유하여 사용할 수 있는 범위를 지정해 둔 단위

 

1. 스코프 외부에서는 스코프 내부의 멤버를 '참조연산자'로만 참조가 가능하다.

(클래스의 멤버를 참조할 때 클래스 외부에서 a.eat() 과 같이 접근)

2. 동일 스코프 내에서는 멤버들을 공유할 수 있다.

val a = "패키지 스코프"

class B {
    fun print() {
        println(a)
    }
}

fun main() {
    println(a)
    B().print()
}

default pakage에서 만드는 모든 멤버들은 같은 패키지 스코프에 포함된다.

변수  a는 클래스 B나 main함수에 속해 있지는 않지만 동일한 스코프 내에서 변수를 공유하여 사용할 수 있다.

 

3. 하위 스코프에서는 상위 스코프의 멤버를 재정의할 수 있다.

val a = "패키지 스코프"

class B {
    val a = "클래스 스코프"
    fun print() {
        println(a)
    }
}

fun main() {
    val a = "함수 스코프"
    println(a)
    B().print()
}

상위 스코프에 있던 변수 a를 참조하지 않고 각각의 스코프에 있는 값을 참조하는 것을 볼 수 있다.

2.  접근 제한자

스코프 외부에서 스코프 내부에 접근할 때 권한을 '개발자가 제어'할 수 있는 기능이다.

 

1. 패키지 스코프

public : 어떤 패키지에서도 접근 가능 (기본값)

internal : 같은 모듈 내에서만 접근 가능

private : 같은 파일 내에서만 접근 가능

 

2. 클래스 스코프

public : 클래스 외부에서 접근 가능 (기본값)

private : 클래스 내부에서만 접근 가능

protected : 클래스 자신과 상속받은 클래스에서 접근 가능

3. 정리

스코프는 멤버들의 가용 범위를 지정해둔 단위로 개발자는 스코프 안에 변수나 함수, 클래스를 배치할 수 있다.

접근 제한자는 이러한 스코프의 외부와 내부에서 사용할 멤버를 분리하여 스코프 외부에서 건드리지 말아야 할 기능이나 값들을 안전하게 제한하는 용도이다.

 

 

https://www.youtube.com/watch?v=q7GV68jKLVM&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=13

위 강의를 보면서 개인적으로 공부한 내용을 정리하였습니다.

반응형