티스토리 뷰

728x90

 


범위(Scope)

• 변수를 사용할 수 있는 범위, 영역

• 변수, 함수, 클래스, 패키지 등의 범위가 있다.

• 보통, 변수가 선언된 그 블록({ }로 둘러쌓인 범위)이 변수의 스코프이다.

     - 즉, 한 블록 안에서 선언된 변수는 그 안에서만 사용이 가능하다.

• 스코프 내부에 또 스코프가 있다면, 상위 스코프, 하위 스코프로 나뉜다.

     - 하위 스코프에서는 상위 스코프 멤버를 사용 및 (재)할당 할 수 있지만 반대는 안 된다.

// 변수 사용 가능 범위
fun func1() {
    val NUM1 = 1
}
println(NUM1) // 오류 발생 : NUM1은 없는 변수 -> NUM1 변수의 사용 가능 범위는 func1 함수의 블럭({ }) 안.

// 상위 스코프와 하위 스코프
var outsideNum = 1
fun changeNumber() {
    outsideNum = 20 // 하위 스코프에서는 상위 스코프의 변수에 접근 및 할당 가능

    val outsideNum = 10
    println(outsideNum) // 10 출력 : 하위 스코프의 outsideNum과 상위 스코프의 outsideNum은 다른 변수
}
println(outsideNum) // 20 출력

 

* 즉, 스코프는 개발자의 의도와 상관없이 자동으로 변수 접근의 제한이 생긴다.

 

접근 제한자

• 개발자의 의도에 따라 접근의 제한 정도를 정할 수 있다.

• public, internal, private, protact 가 있다.

• 변수, 함수, 클래스 선언 시 맨 앞에 적어준다.

     ex) private val number: Int = 10

• 패키지에서의 접근 제한자

     - public -> 패키지 외부에서 접근 가능 ( = 어디에서나 접근 가능)

     - internal -> 같은 모듈 안에서 접근 가능

     - protected -> 사용 안 함

     - private -> 같은 파일 안에서만 접근 가능

• 클래스에서의 접근 제한자

     - public -> 클래스 외부에서 접근 가능

     - internal -> 사용 안 함

     - protected -> 클래스 내부와 상속받은 클래스에서 접근 가능

     - private -> 클래스 내부에서만 사용 가능

• 주로 사용하는 접근 제한자 키워드

     - public, private

• 접근 제한자를 명시하지 않으면 기본적으로 public이다.

class Numbers(private var number: Int = 10) { // number 프로퍼티 private로 선언
    fun changeNumber() {
        this.number = 100 // private는 class 내부에서 접근 가능
    }
}
val numbers = Numbers()
numbers.number = 1000 // 오류 발생 : private는 클래스 외부에서 접근 불가

class Numbers2(var number: Int = 10) {} // 접근 제한자 명시하지 않으면 number 프로퍼티 public으로 자동 선언
val numbers2 = Numbers2()
println(numbers2.number) // 10 출력 : public은 class 내부에서도 접근 가능
numbers2.number = 100
println(numbers2.number) // 100 출력 : get / set 둘 다 됨

 

 

 

 

 

 

이 글은

패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.

 


728x90
댓글
공지사항