더북(TheBook)

정답은 ‘오류가 발생한다’입니다. 결과창에 ‘UnboundLocalError: local variable ‘glasses’ referenced before assignment’라는 오류 메시지가 뜹니다. 이는 ‘glasses라는 변수가 아직 할당되지 않았는데 사용됐다’는 뜻입니다. 분명 코드 앞부분에 10이라는 값으로 glasses 변수를 정의했는데 왜 이런 메시지가 나왔을까요?

그 이유는 함수를 사용할 때 꼭 알아야 하는 개념인 지역변수와 전역변수 때문입니다. 지역변수(local variable)는 함수 안(지역)에서만 사용할 수 있는 변수로, 매개변수를 포함해 함수 안에서 새롭게 정의하는 변수는 모두 해당합니다. 이와 반대로 전역변수(global variable)는 모든 곳(전역)에서 사용할 수 있는 변수입니다. 개념에서 보듯이 두 변수는 사용할 수 있는 범위가 다릅니다.

7.2.1 실습: 입금하기에서 함수를 정의하고 호출할 때 이름이 같은 balance 변수를 사용했습니다. 하지만 두 변수는 같은 변수가 아니라고 했습니다. 함수에 정의한 balance 변수는 전달값을 받는 매개변수이고, 함수 안에서만 사용할 수 있습니다. 따라서 지역변수입니다.

매개변수 balance와 마찬가지로 rent() 함수 안에서 사용하는 glasses 변수도 함수 외부에 정의한 glasses와는 아무 상관없는, rent() 함수 안에서 새로 만들어진 지역변수입니다. 그런데 값을 넣어 정의하기 전에 glasses - people이라는 연산을 하려 해서 오류가 발생한 것입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.