[Kotlin] 4-3. 함수와 변수의 범위

leeeha·2022년 7월 1일
0

코틀린

목록 보기
12/28
post-thumbnail

출처: https://www.boostcourse.org/mo132/lecture/59979

함수의 범위

함수의 실행 블록 {}

  • 지역 변수: 블록 내에서 사용하는 변수 ↔ 전역 변수

최상위 함수와 지역 함수

  • 최상위 함수는 메모리에 고정되어 있어서 메인 함수 이전, 이후 위치 상관없이 어디에든 선언하고 호출 가능!
  • 지역 함수는 먼저 선언되어야 그 함수를 호출할 수 있음. 아직 선언되지 않은 함수를 사용하려고 하면 컴파일러가 unresolved reference 에러를 냄. 컴파일러 입장에서는 아직 함수의 이름을 모르는 것!
package chap04.section4

fun main() { // 최상위 레벨의 함수 
    fun secondFunc(a: Int){ // 지역 함수 선언 
        // ...
    }
    
    userFunc(4) // 사용자 정의 함수 사용 (선언부의 위치 상관 없이 사용)
    secondFunc(2) // 지역 함수 사용 (선언부가 먼저 나와야 사용 가능) 
}

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

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

fun c(){
    //fun d() = e() // error (d는 지역 함수이며 e의 이름을 모름)
    fun e() = println("e")
}

fun main() {
    a() // 최상위 함수는 어디서든 호출 가능
    //e() // error (c에 정의된 e는 c의 블록을 벗어난 곳에서 사용 불가)
}

변수의 범위

전역 변수

  • 한 패키지 내에서 최상위에 있는 변수로, 프로그램이 실행되는 동안 삭제되지 않고 메모리에 유지됨.
  • 여러 요소가 동시에 접근하는 경우, 잘못된 동작을 유발할 수 있음.
  • 자주 사용되지 않는 전역 변수는 메모리 자원을 낭비할 수 있음.
package chap04.section4

var global = 10

fun main() {
    global = 15
    println("global: $global")

    userFunc()
    println("final - global: $global")
}

fun userFunc(){
    global = 20
    println("userFunc - global: $global")
}

global: 15
userFunc - global: 20
final - global: 20

지역 변수

  • 특정 코드 블록 내에서만 사용
  • 블록 시작 시 임시로 사용되며, 주로 스택 메모리를 사용
  • 블록을 벗어나면 지역 변수는 메모리에서 더 이상 사용되지 않고 삭제됨.
package chap04.section4

var global = 10

fun main() {
    global = 15
    val local1 = 15
    println("global: $global")

    userFunc()
    println("final - global: $global, local1: $local1")
}

fun userFunc(){
    global = 20
    val local1 = 20
    println("userFunc - global: $global, local1: $local1")
}

global: 15
userFunc - global: 20, local1: 20
final - global: 20, local1: 15

profile
꾸준히!

0개의 댓글