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