-
이제 이제 함수의 기본들을 익혔으니, 약간 까다로운
지역변수 (local variable)와 전역변수(glbal variable)에 대해서 말하겠습니다
-
이 용어들은 지금 여러분들에게 아무 의미도 없을지 모릅니다
우선 예를 가지고 시작해 봅시다
-
저는 이 프로그램을 제가 어릴 때 몇 인치씩
컸는지 보여주기 위해서 만들었습니다
-
사람들은 다른 속도로 크기 때문에
calcInches이란 함수를 만들었습니다
-
이 함수에는 startAge(시작 나이), endAge(끝나는 나이)
그리고 inchesPerYear(매년 자란 인치)룰 전달합니다
-
그러면 그 함수는 그 기간동안 몇 인치가 자랐는지 계산해서
-
그 함수를 호출한 곳으로 그 값을 돌려 줍니다
-
보다시피 0살부터 8살까지에 대해
calcInches를 호출하고 0, 8 그리고 2.5를 보냅니다
-
저는 매년 약 2.5인치씩 자랐기 때문입니다.
-
이를 계산 하면, 이는 20이란 결과를 보여줍니다.
-
그다음 8살 부터 16까지는, 8, 16 그리고 2를 전달합니다
-
왜냐하면 전과 비교하여 덜 자랐기 때문이고
16이란 결과를 보여주는 것을 볼 수 있습니다
-
깔끔하죠? 하지만 이제 청소년기를 통틀어
얼마나 자랐는지를 보이고 싶습니다
-
이건 어떻게 할까요? 음...
내 프로그램 코드를 보면서 생각을 해봅시다
-
"흠… 무슨 값들을 내가 가지고 있죠?"
총 인치 값처럼 보이는 것이 있나요?
-
음... totalInches란 변수가 calcInches 함수안에 있기 때문에
-
결과를 내서 뭐라고 하는지를 보는 것부터 시작을 합시다
-
즉 이 부분 text(totalInches, 10, 200)을 아래로 옮깁시다
-
그러면.. 어디까지 했죠? 어 어떡하죠? 'Oh noes!' 이모티콘이 튀어나왔습니다
문제가 있다고 합니다
-
totalInches가 정의되지 않았답니다. 흠, 이상하네요, 왜냐하면
여기에 totalInches에 관한 정의를 썼는데 말입니다. (var total inches =)
-
흠, 문제는 함수 안에서 totalInches를 선언했기 때문입니다
이 줄에서 말입니다
-
그리고 함수 안에 변수를 선언하면
이는 지역변수(local variable)로 취급합니다
-
이는 이 함수(calcInches)안에만 존재합니다.
-
그리고 함수 밖에 있는 모든 코드들은 함수 안에 있는
지역변수(local variable)를 보지 못합니다
-
이것은 단지 반환되는 것만 봅니다
-
이는 변수는 보지 않고 값만 봅니다
-
그러므로 totalInches를 함수 밖에서 사용하고 싶다면
컴퓨터는 이것이 무엇인지 모르고
-
'난 이 변수를 본 적이 없어. 정의가 되어있지 않아
보여줄 수 없어'라고 합니다
-
코드 밖에서 위치한 코드가 이 변수를 볼 수 있게 하는 방법이 있습니다
-
그리고 이는 지역변수(local variable)에서
전역변수(global variable)로 전환할 때입니다
-
정의를 함수 밖, 전역 범위라 불리는 곳으로 이동하면 됩니다
-
그리고 이제는 변수를 정의하거나 선언하지 않고
함수 안에서 값을 매번 바꾸기만 하면 됩니다
-
그러므로 'Total grown over life: 16'이란 것을 볼 수 있습니다
-
전역변수(global variable)로 바꿨기 때문에
컴퓨터는 변수를 찾을 수 있었습니다
-
그러나 이 값은 우리가 정말 찾고 있는 값은 아닙니다
-
이 값은 단순히 가장 최근 값입니다
-
왜냐하면 이 함수를 부를 때마다 totalInches를
그 당시에 계산하는 값으로 인식하기 때문입니다
-
그러므로 우리가 정말 하고 싶은 것은
전체 총합을 저장할 수 있는 새로운 변수를 원합니다
-
매번 계산한 값을 계속 합해 나간 전체 범위에서의 총합 말입니다
-
그러므로 이를 지역변수(local variable)로 다시 바꾸고
lifeInches란 새로운 전역변수(globa variable)를 만듭시다
-
그리고 그것을 0에 놓고 시작합시다
-
함수 안에서는, lifeInches +=totalInches라고 하여
이 전역변수에 더해 나갑니다
-
이 함수를 부를 때마다 계산해서 나온 값을 계속 더할것 입니다
-
그리고 이 아래쪽에 lifeInches를 놓읍시다
-
(lifeInches, 10, 200)
-
짜잔! 인생에서 총 성장한 값이 나옵니다.
-
이 것은 제 진짜 키가 아닙니다
그것보단 큽니다
-
그러나 알다시피 태어날 때 키는
0보다는 더 큰 값에서 시작합니다
-
총합을 구하기 위해선
아마도 20에서 시작해보도록 합시다
-
여기있네요, 이게 제 키입니다
-
좋습니다. 이제 복습을 해봅시다
totalInches는 흔히 지역변수(local variable)라 불리는 것입니다
-
이 함수 밖이 아닌 안에 선언한 것을 알기에
-
이는 여기 밖에 있는 이 코드는
totalInches란 변수를 모른다는 것을 의미합니다
-
그리고 이제 lifeInches는 전역 변수라고 불리는 것입니다
-
왜냐하면 이의 선언을 전역 범위
즉 함수 밖에서 선언되기 때문입니다
-
함수와 변수를 작성할 때에는 이것을 꼭 기억하시길 바랍니다
-
그리고 함수 안에서 사용하기 위해 지역변수를 원하는지
-
아니면 프로그램 전체에서 쓰기 위해
지역변수(local variable)를 필요로 하는지 생각하시길 바랍니다
-
그리고 이해하기 어렵다고 걱정하지 마시길 바랍니다
-
이 개념은 특히 JavaScript 프로그래밍에서 가장 어려운 개념 중 하나입니다
-
그리고 이 것은 꾸준히 연습할수록 느는 것 입니다