1 00:00:00,000 --> 00:00:10,768 이제 이제 함수의 기본들을 익혔으니, 약간 까다로운 지역변수 (local variable)와 전역변수(glbal variable)에 대해서 말하겠습니다 2 00:00:10,768 --> 00:00:15,332 이 용어들은 지금 여러분들에게 아무 의미도 없을지 모릅니다 우선 예를 가지고 시작해 봅시다 3 00:00:15,332 --> 00:00:20,275 저는 이 프로그램을 제가 어릴 때 몇 인치씩 컸는지 보여주기 위해서 만들었습니다 4 00:00:20,275 --> 00:00:24,588 사람들은 다른 속도로 크기 때문에 calcInches이란 함수를 만들었습니다 5 00:00:24,588 --> 00:00:31,001 이 함수에는 startAge(시작 나이), endAge(끝나는 나이) 그리고 inchesPerYear(매년 자란 인치)룰 전달합니다 6 00:00:31,001 --> 00:00:34,727 그러면 그 함수는 그 기간동안 몇 인치가 자랐는지 계산해서 7 00:00:34,727 --> 00:00:37,842 그 함수를 호출한 곳으로 그 값을 돌려 줍니다 8 00:00:37,842 --> 00:00:44,969 보다시피 0살부터 8살까지에 대해 calcInches를 호출하고 0, 8 그리고 2.5를 보냅니다 9 00:00:44,969 --> 00:00:48,737 저는 매년 약 2.5인치씩 자랐기 때문입니다. 10 00:00:48,737 --> 00:00:52,713 이를 계산 하면, 이는 20이란 결과를 보여줍니다. 11 00:00:52,713 --> 00:00:58,239 그다음 8살 부터 16까지는, 8, 16 그리고 2를 전달합니다 12 00:00:58,239 --> 00:01:02,953 왜냐하면 전과 비교하여 덜 자랐기 때문이고 16이란 결과를 보여주는 것을 볼 수 있습니다 13 00:01:02,953 --> 00:01:08,462 깔끔하죠? 하지만 이제 청소년기를 통틀어 얼마나 자랐는지를 보이고 싶습니다 14 00:01:08,462 --> 00:01:17,050 이건 어떻게 할까요? 음... 내 프로그램 코드를 보면서 생각을 해봅시다 15 00:01:17,050 --> 00:01:21,512 "흠… 무슨 값들을 내가 가지고 있죠?" 총 인치 값처럼 보이는 것이 있나요? 16 00:01:21,512 --> 00:01:26,038 음... totalInches란 변수가 calcInches 함수안에 있기 때문에 17 00:01:26,038 --> 00:01:30,820 결과를 내서 뭐라고 하는지를 보는 것부터 시작을 합시다 18 00:01:30,820 --> 00:01:36,440 즉 이 부분 text(totalInches, 10, 200)을 아래로 옮깁시다 19 00:01:36,440 --> 00:01:43,457 그러면.. 어디까지 했죠? 어 어떡하죠? 'Oh noes!' 이모티콘이 튀어나왔습니다 문제가 있다고 합니다 20 00:01:43,457 --> 00:01:51,816 totalInches가 정의되지 않았답니다. 흠, 이상하네요, 왜냐하면 여기에 totalInches에 관한 정의를 썼는데 말입니다. (var total inches =) 21 00:01:51,816 --> 00:01:59,731 흠, 문제는 함수 안에서 totalInches를 선언했기 때문입니다 이 줄에서 말입니다 22 00:01:59,731 --> 00:02:04,925 그리고 함수 안에 변수를 선언하면 이는 지역변수(local variable)로 취급합니다 23 00:02:04,925 --> 00:02:09,736 이는 이 함수(calcInches)안에만 존재합니다. 24 00:02:09,736 --> 00:02:15,013 그리고 함수 밖에 있는 모든 코드들은 함수 안에 있는 지역변수(local variable)를 보지 못합니다 25 00:02:15,013 --> 00:02:18,824 이것은 단지 반환되는 것만 봅니다 26 00:02:18,824 --> 00:02:21,824 이는 변수는 보지 않고 값만 봅니다 27 00:02:21,824 --> 00:02:26,368 그러므로 totalInches를 함수 밖에서 사용하고 싶다면 컴퓨터는 이것이 무엇인지 모르고 28 00:02:26,368 --> 00:02:31,345 '난 이 변수를 본 적이 없어. 정의가 되어있지 않아 보여줄 수 없어'라고 합니다 29 00:02:31,345 --> 00:02:37,609 코드 밖에서 위치한 코드가 이 변수를 볼 수 있게 하는 방법이 있습니다 30 00:02:37,609 --> 00:02:42,978 그리고 이는 지역변수(local variable)에서 전역변수(global variable)로 전환할 때입니다 31 00:02:42,978 --> 00:02:50,396 정의를 함수 밖, 전역 범위라 불리는 곳으로 이동하면 됩니다 32 00:02:50,396 --> 00:02:58,655 그리고 이제는 변수를 정의하거나 선언하지 않고 함수 안에서 값을 매번 바꾸기만 하면 됩니다 33 00:02:58,655 --> 00:03:03,224 그러므로 'Total grown over life: 16'이란 것을 볼 수 있습니다 34 00:03:03,224 --> 00:03:06,648 전역변수(global variable)로 바꿨기 때문에 컴퓨터는 변수를 찾을 수 있었습니다 35 00:03:06,648 --> 00:03:10,315 그러나 이 값은 우리가 정말 찾고 있는 값은 아닙니다 36 00:03:10,315 --> 00:03:12,412 이 값은 단순히 가장 최근 값입니다 37 00:03:12,412 --> 00:03:18,429 왜냐하면 이 함수를 부를 때마다 totalInches를 그 당시에 계산하는 값으로 인식하기 때문입니다 38 00:03:18,429 --> 00:03:23,720 그러므로 우리가 정말 하고 싶은 것은 전체 총합을 저장할 수 있는 새로운 변수를 원합니다 39 00:03:23,720 --> 00:03:29,413 매번 계산한 값을 계속 합해 나간 전체 범위에서의 총합 말입니다 40 00:03:29,413 --> 00:03:38,378 그러므로 이를 지역변수(local variable)로 다시 바꾸고 lifeInches란 새로운 전역변수(globa variable)를 만듭시다 41 00:03:38,378 --> 00:03:41,004 그리고 그것을 0에 놓고 시작합시다 42 00:03:41,004 --> 00:03:49,976 함수 안에서는, lifeInches +=totalInches라고 하여 이 전역변수에 더해 나갑니다 43 00:03:49,976 --> 00:03:53,266 이 함수를 부를 때마다 계산해서 나온 값을 계속 더할것 입니다 44 00:03:53,266 --> 00:03:56,403 그리고 이 아래쪽에 lifeInches를 놓읍시다 45 00:03:56,403 --> 00:03:59,867 (lifeInches, 10, 200) 46 00:03:59,867 --> 00:04:03,838 짜잔! 인생에서 총 성장한 값이 나옵니다. 47 00:04:03,838 --> 00:04:06,691 이 것은 제 진짜 키가 아닙니다 그것보단 큽니다 48 00:04:06,691 --> 00:04:10,509 그러나 알다시피 태어날 때 키는 0보다는 더 큰 값에서 시작합니다 49 00:04:10,509 --> 00:04:13,484 총합을 구하기 위해선 아마도 20에서 시작해보도록 합시다 50 00:04:13,484 --> 00:04:17,265 여기있네요, 이게 제 키입니다 51 00:04:17,265 --> 00:04:22,067 좋습니다. 이제 복습을 해봅시다 totalInches는 흔히 지역변수(local variable)라 불리는 것입니다 52 00:04:22,067 --> 00:04:27,499 이 함수 밖이 아닌 안에 선언한 것을 알기에 53 00:04:27,499 --> 00:04:33,288 이는 여기 밖에 있는 이 코드는 totalInches란 변수를 모른다는 것을 의미합니다 54 00:04:33,288 --> 00:04:37,816 그리고 이제 lifeInches는 전역 변수라고 불리는 것입니다 55 00:04:37,816 --> 00:04:42,839 왜냐하면 이의 선언을 전역 범위 즉 함수 밖에서 선언되기 때문입니다 56 00:04:42,839 --> 00:04:47,024 함수와 변수를 작성할 때에는 이것을 꼭 기억하시길 바랍니다 57 00:04:47,024 --> 00:04:51,370 그리고 함수 안에서 사용하기 위해 지역변수를 원하는지 58 00:04:51,370 --> 00:04:54,646 아니면 프로그램 전체에서 쓰기 위해 지역변수(local variable)를 필요로 하는지 생각하시길 바랍니다 59 00:04:54,646 --> 00:04:57,684 그리고 이해하기 어렵다고 걱정하지 마시길 바랍니다 60 00:04:57,684 --> 00:05:01,674 이 개념은 특히 JavaScript 프로그래밍에서 가장 어려운 개념 중 하나입니다 61 00:05:01,674 --> 00:05:05,674 그리고 이 것은 꾸준히 연습할수록 느는 것 입니다