IMCAT.DEV
로그인 가입
Scala 입문 자료구조

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. 정리

  • 지역 변수는 특정 블록에서만 유효하며, 전역 변수는 전체 프로그램에서 접근 가능합니다.
  • 지역 변수를 사용하여 코드의 가독성을 높이고, 전역 변수의 사용은 신중해야 합니다.
  • 실무에서 지역 변수를 적절히 활용하면 데이터 충돌을 방지하고, 유지보수를 용이하게 할 수 있습니다.
  • 다음에 학습하면 좋은 주제:

  • 함수와 메소드의 차이
  • 객체 지향 프로그래밍의 기초
  • 패턴 매칭(Pattern Matching) 이해하기