본문 바로가기

# 02/코틀린

[Kotlin] 함수와 변수의 범위

반응형

함수의 블록({})

- 블록내에서 사용하는 변수 - 지역 변수(Local variable)


함수의 범위(Scope)

- 최상위 함수와 지역 함수


fun main() {                                                     // 최상위 레벨의 함수

fun secondFunc(a : Int) {                               // 지역 함수 선언


}

userFunc(4)                                               // 사용자 함수 사용 - 선언부의 위치에 상관 없이 사용

secondFunc(2)                                           // 지역 함수 사용 - 선언부가 먼저 나와야 사용 가능

}


fun userFunc(counts : Int) {                                // 사용자가 만든 최상위 레벨의 함수 선언


}

- 최상위 하수는 선언 위치에 상관 없이 어디서든 사용할 수 있다. 최상위 함수는 내부적으로 static final 로 정의되 객체 생성없이 메모리 상에 존재할 수 있으므로 어디서든 사용할 수 있다.

- 지역함수는 사용 전 꼭 먼저 선언되어 있어야 한다.


최상위 및 지역 함수의 사용 범위

- 최상위 함수는 main() 함수 전, 후 어디든 선언하고 코드 내에서 호출 가능

- 지역 함수는 먼저 선언되어야 그 함수를 호출할 수 있음




fun a() = b()                          // 최상위 함수 이므로 b()함수 선언 위치에 상관 없이 사용 가능

fun b() = println("b")               // b() 함수의 선언


fun c() = {

fun d() = e()                    // 오류! d()는 지역함수이며 e()의 이름을 모름

fun e() = println("e")

}


fun main() {

a()                                // 최상위 함수는 어디서든 호출될 수 있다.

e()                                // 오류! c() 함수에 정의된 e()는 c의 블록({})을 벗어난 곳에서 사용할 수 없음

}




전역 변수

- 최상위에 있는 변수로 프로그램이 실행되는 동안 삭제되지 않고 메모리에 유지

- 여러 요소가 동시에 접근하는 경우에 잘못된 동작을 유발할 수 있음

- 자주 사용되지 않는 전역 변수는 메모리 자원 낭비


지역변수

- 특정 코드 블록 내에서만 사용

- 블록 시작 시 임시로 사용되며 주로 스택 메모리를 사용



var global = 10                                                        // 전역 - 패키지의 모든 범위에 적용


fun main() {

val local1 = 20                                                   // main 블록 내에서만 유지

val local2 = 21


fun nestedFunc() {

global += 1

val local1 = 30                                            // func() 함수 블록 내에서만 유지 (기존 local1이 가려짐)

println("nestedFunc local1 : $local1")

println("nestedFunc local2 : $local2")                // 이 블록 바로 바깥의 main의 local2 사용

println("nestedFunc global : $global")

}

nestedFunc()

outsideFunc()

println("main global : $global")

println("main local1 : $local1")

println("main local2 : $local2")

}

fun outsideFunc() {

global += 1

val outVal = "outside"

println("outsideFunc global : $global")

println("outsideFunc outVal : $outVal")

}

반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] Types  (0) 2019.07.11
[Kotlin] 조건문  (0) 2019.07.10
[Kotlin] android extentions  (0) 2019.07.09
[Kotlin] 코드 예제 MainActivity.kt  (0) 2019.07.08
[Kotlin] 안드로이드 코딩 3  (0) 2019.07.08