코틀린에서 스코프(Scope)란?

2025. 5. 20. 16:32프로그래밍 언어

728x90
반응형

프로그래밍에서 "스코프(scope)"는 변수나 함수, 클래스 등의 이름(식별자)이 유효한 범위를 뜻한다.

코틀린(Kotlin)에서는 이 개념이 특히 중요한데, 코드의 안정성, 가독성, 유지보수성에 큰 영향을 주기 때문이다.


스코프(Scope)란?

어떤 이름(식별자)이 어디서부터 어디까지 유효한지(접근 가능한지)를 결정짓는 논리적 범위.

스코프가 중요한 이유

  • 이름 충돌 방지: 서로 다른 블록에 같은 이름 사용 가능
  • 캡슐화: 외부에 불필요한 정보 숨기기
  • 가독성/유지보수 향상: 필요한 곳에서만 변수 사용 가능
  •  

코틀린의 주요 스코프 종류

1. 로컬 스코프 (Local Scope)

  • 함수나 블록 내부에서 선언된 변수
  • 해당 블록 내에서만 유효
fun greet() {
    val name = "Bbang_9999u" // 로컬 스코프
    println(name)
}

// println(name) // ❌ 오류 발생: 스코프 밖

2. 클래스 스코프 (Class Scope)

  • 클래스 내부의 변수/함수는 클래스 범위에서 접근 가능
class User {
    val name = "Bbang_9999u"

    fun printName() {
        println(name) // 클래스 스코프 내 접근 가능
    }
}

3. 패키지 스코프 (Package Scope)

  • Kotlin에서는 top-level 함수/변수 정의 가능
  • 같은 패키지 안이라면 어디서든 접근 가능 (접근 제한자 주의)
// 파일: AppConfig.kt
val apiKey = "abc123"

fun getVersion() = "1.0.0"
// 같은 패키지의 다른 파일
fun showInfo() {
    println(apiKey) // 접근 가능
    println(getVersion())
}

4. 파일 스코프 (File Scope)

  • Kotlin은 하나의 파일에 여러 선언 가능
  • 특정 어노테이션을 파일 단위로 적용할 수 있음
@file:Suppress("unused")

5. 중첩 스코프 (Nested Scope)

  • 내부 블록은 외부 변수에 접근 가능
  • 하지만 외부 블록은 내부 변수에 접근 ❌
fun outer() {
    val outerName = "Outside"
    if (true) {
        val innerName = "Inside"
        println(outerName) // ✅ 가능
    }
    // println(innerName) // ❌ 불가능
}

보너스: 스코프 함수 (let, run, apply, also, with)

Kotlin에는 "스코프 함수" 라는 것도 있다.

이건 객체를 특정 블록 안에서 일시적으로 다루기 좋게 만든 함수들이다.

참고 링크 : Kotlin에서 유용한 고차 함수 정리

 

 

728x90
반응형