학습
Scala 지역 변수와 전역 변수
Scala 지역 변수와 전역 변수 — 초급
지역 변수와 전역 변수
1. 도입 (왜 배워야 하는가)
프로그램을 작성할 때, 데이터를 저장하는 방법과 범위(scope)를 이해하는 것은 매우 중요합니다. 지역 변수와 전역 변수의 개념은 코드의 가독성과 유지보수성에 큰 영향을 미칩니다. 지역 변수는 특정 함수나 블록 내에서만 유효하고, 전역 변수는 전체 프로그램에서 접근이 가능합니다.
이 두 가지를 명확히 이해하지 못하면, 변수의 충돌, 예기치 않은 동작 및 디버깅의 어려움이 발생할 수 있습니다. 예를 들어, 전역 변수를 무분별하게 사용하면 여러 함수에서 같은 변수를 변경할 수 있어, 프로그램의 흐름을 이해하기 어려워집니다.
2. 핵심 개념 설명
- 지역 변수 (Local Variable): 특정 함수 또는 블록 내에서만 유효하며, 해당 범위 외부에서는 접근할 수 없습니다. 마치 방 안에 있는 물건처럼, 방을 나가면 사용할 수 없습니다.
- 전역 변수 (Global Variable): 프로그램 전체에서 접근 가능한 변수입니다. 모든 함수에서 사용 가능하지만, 관리가 어렵고 충돌의 위험이 있습니다. 마치 집 안에 있는 물건처럼, 집 안 어디에서나 사용할 수 있습니다.
| 용어 | 정의 |
|---|---|
| 지역 변수 | 특정 블록 내에서만 접근 가능한 변수 |
| 전역 변수 | 전체 프로그램에서 접근 가능한 변수 |
3. 기본 코드 예제
object VariableExample {
var globalVar: Int = 10 // 전역 변수
def localFunction(): Unit = {
val localVar: Int = 5 // 지역 변수
println(s"지역 변수: $localVar") // 지역 변수 출력
}
def main(args: Array[String]): Unit = {
println(s"전역 변수: $globalVar") // 전역 변수 출력
localFunction() // 지역 변수를 포함한 함수 호출
// println(s"지역 변수: $localVar") // 이 줄은 오류 발생: 지역 변수는 여기서 접근 불가
}
}
실행 결과:
전역 변수: 10
지역 변수: 5
var globalVar: Int = 10: 전역 변수를 선언하고 초기화합니다.def localFunction(): 지역 변수를 사용할 함수 정의.val localVar: Int = 5: 지역 변수를 선언하고 초기화합니다.println(s"지역 변수: $localVar"): 지역 변수를 출력합니다.println(s"전역 변수: $globalVar"): 전역 변수를 출력합니다.println(s"지역 변수: $localVar"): 주석 처리된 이 줄은 오류를 발생시킵니다. 지역 변수는 해당 함수 범위를 벗어나면 접근할 수 없습니다.4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
object ShoppingCart {
var totalItems: Int = 0 // 전역 변수로 총 아이템 수
def addItem(quantity: Int): Unit = {
val newItems: Int = quantity // 지역 변수로 새로 추가된 아이템 수
totalItems += newItems // 총 아이템 수 업데이트
println(s"장바구니에 추가된 아이템 수: $newItems, 총 아이템 수: $totalItems")
}
def main(args: Array[String]): Unit = {
addItem(3)
addItem(5)
}
}
실행 결과:
장바구니에 추가된 아이템 수: 3, 총 아이템 수: 3
장바구니에 추가된 아이템 수: 5, 총 아이템 수: 8
newItems를 사용하여 각 호출에서 추가된 수량을 관리합니다.예제 2: 사용자 입력 처리
object UserInput {
var userCount: Int = 0 // 전역 변수로 사용자 수
def addUser(): Unit = {
val userName: String = scala.io.StdIn.readLine("사용자 이름을 입력하세요: ") // 지역 변수
userCount += 1 // 사용자 수 증가
println(s"사용자 '$userName'가 추가되었습니다. 현재 사용자 수: $userCount")
}
def main(args: Array[String]): Unit = {
addUser()
addUser()
}
}
실행 결과:
사용자 이름을 입력하세요: Alice
사용자 'Alice'가 추가되었습니다. 현재 사용자 수: 1
사용자 이름을 입력하세요: Bob
사용자 'Bob'가 추가되었습니다. 현재 사용자 수: 2
userName을 사용하여 입력된 이름을 저장합니다.5. 흔한 실수와 주의사항
실수 1: 지역 변수의 범위 이해 부족
def exampleFunction() {
val message: String = "Hello"
}
println(message) // 오류 발생: message는 여기서 접근 불가
def exampleFunction(): String = {
val message: String = "Hello"
message // 지역 변수를 반환
}
println(exampleFunction()) // "Hello" 출력
실수 2: 전역 변수의 무분별한 사용
var count: Int = 0
def increment(): Unit = {
count += 1 // 여러 곳에서 수정 가능
}
def reset(): Unit = {
count = 0 // 예기치 않게 전역 변수를 초기화할 수 있음
}
6. 정리
다음에 학습하면 좋은 주제: