프로젝트 구조내에서 변수나 함수, 클래스의 공용범위를 제어하는 단위인 스코프와 스코프 내부에서 스코프 내부로의 접근을 제어하는 접근제한자에 대해서 알아보자.
패키지 스코프 내 변수, 함수, 클래스
패키지 스코프 내에 있는 하위 스코프
1. 스코프 외부에서는 스코프 내부의 멤버를 '참조연산자(.)'로만 참조가 가능하다.
참조연산자? 점(.)을 말한다.
fun main() {
var e = Eater()
e.eat()
}
class Eater() {
fun eat() {
println("와구와구")
}
}
2. 동일 스코프 내에서는 멤버들을 '공유'할 수 있다.
val a = "패키지 스코프"
class B {
fun print() {
println(a)
}
}
fun main() {
println(a)
B().print() // 인스턴스를 변수에 담지않고 바로 사용할 수 있다.
}
// 결과
패키지 스코프
패키지 스코프
3. 하위 스코프에서는 상위 스코프의 멤버를 재정의할 수 있다.
fun main() {
var a = "나는 말이야"
var a = "나는 소야"
}
conflicting declarations(선언부가 서로 충돌한다.) 에러가 발생한다.
val a = "패키지 스코프"
class B {
val a = "클래스 스코프"
fun print() {
println(a)
}
}
fun main() {
val a = "함수 스코프"
println(a)
B().print()
}
// 결과
함수 스코프
클래스 스코프
선언시 앞에 붙여 사용한다.
스코프는 멤버들의 가용범위를 지정해 둔 단위로 개발자는 의도에 따라 스코프 안에 변수나 함수, 클래스를 배치할 수 있다.
접근제한자는 이러한 스코프의 외부와 내부에서 사용할 멤버를 분리하여 스코프 외부에서 건드리지 말아야할 기능이나 값들을 안전하게 제한하는 용도를 가지고 있다.