함수의 블록({})
- 블록내에서 사용하는 변수 - 지역 변수(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 |