스코프는 언어 차원에서 변수나, 함수 클래스와 같은 멤버들을 서로 공유하여 사용할 수 있는 범위를 지정해둔 단위이다.
스코프가 지정되는 범위는 패키지 내부, 클래스 내부, 함수 내부 등이 있다.
하나의 패키지 안에 변수, 함수, 클래스가 있다면 이것들은 모두 하나의 스코프 안에 있는 멤버이다. 그러나 다시 함수나 클래스 안에 변수나 함수가 있다면
패키지 스코프 안에 또 다른 하위 스코프로 들어간다.
스코프 외부에서는 스코프 내부의 멤버를 참조 연산자로만 참조가 가능하다.
클래스의 멤버 참조 시 클래스 외부에서 인스턴스명에 참조 연산자를 사용해 접근한 것
a.eat()
동일 스코프 내에서는 멤버들을 공유할 수 있다.
하위 스코프에서는 상위 스코프 멤버를 재정의 할 수 있다.
```
val a = "패키지 스코프"
class B {
val a = "클래스 스코프"
fun print(){
println(a)
}
}
fun main() {
val a = "함수 스코프"
println(a)
B().print()
}
//함수 스코프
//클래스 스코프
```
: 스코프 외부에서 스코프 내부에 접근 시 그 권한을 개발자가 제어할 수 있는 기능
변수, 함수, 클래스 선언 시 맨 앞에 붙여서 사용
스코프는 멤버들의 가용범위를 지정하는 단위로 개발자는 의도에 따라 스코프 내 변수, 함수, 클래스를 배치 가능하고, 접근 제한자는 이러한 스코프에 내부와 외부에서 사용할 멤버를 분리해 스코프 외부에서 건드리지 말아야 할 기능이나 값을 안전하게 제한하는 용도를 가진다.
참고자료
디모의 코틀린 강좌