[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:05.82,Default,,0000,0000,0000,,이번 시간에는 이전 강의들에서 계속 사용해왔던 것을\N이야기해보려고 합니다. 바로 함수(Function)를 말이죠 Dialogue: 0,0:00:05.82,0:00:10.53,Default,,0000,0000,0000,,rect()나 fill() 또는 text()같은 명령어를 사용할 때마다\N사실은 함수를 부르고있던겁니다 Dialogue: 0,0:00:10.53,0:00:14.10,Default,,0000,0000,0000,,그리고 그 함수들은 여러분이 하라고 한 것들을 그려주었습니다 Dialogue: 0,0:00:14.10,0:00:16.27,Default,,0000,0000,0000,,그럼 함수라는 것은 무엇일까요?\N Dialogue: 0,0:00:16.27,0:00:23.59,Default,,0000,0000,0000,,코드들을 그룹지어 모은 집합이라고 할 수 있는데, 함수(function)라고 이름을 지은 것은\N그 함수적 기능(functionality)를 여러 번 사용할 수 있게 하기 위해서 입니다\N Dialogue: 0,0:00:23.59,0:00:26.46,Default,,0000,0000,0000,,예를 들어 rect()에 대해서 생각해볼까요?\Nrect()는 무엇을 하나요? Dialogue: 0,0:00:26.46,0:00:31.48,Default,,0000,0000,0000,,단순히 네 개의 선을 그려줄 뿐이에요 맞나요?\Nline() 함수를 이용해서도 만들 수 있어요 Dialogue: 0,0:00:31.48,0:00:34.11,Default,,0000,0000,0000,,이렇게 하면 사각형을 그린 것처럼 보이겠지요? Dialogue: 0,0:00:34.11,0:00:40.08,Default,,0000,0000,0000,,하지만 사각형을 아주 많이 그리기를 원한다면\N매우 짜증이 날겁니다 Dialogue: 0,0:00:40.08,0:00:43.55,Default,,0000,0000,0000,,매번 계산을 하는 것도 그렇고요\N이리저리 시도를 해봐야 하는 것도 그렇습니다\N Dialogue: 0,0:00:43.55,0:00:47.59,Default,,0000,0000,0000,,한쪽 모퉁이에서 다음 것으로 선을 그리고 그 다음 것으로 다시 선을 그리고 Dialogue: 0,0:00:47.59,0:00:54.76,Default,,0000,0000,0000,,그래서 그대신에 rect()함수를 만들었고, 이 함수는 같은 일을 똑같이 해줍니다\N네 줄의 코드가 한 것을 훨씬 적은 코드로 해줍니다\N Dialogue: 0,0:00:54.76,0:01:02.50,Default,,0000,0000,0000,,게다가 멋지게도 rect()는 Khan Academy의\N모든 프로그램에서 사용할 수 있는 함수 중에 하나입니다 Dialogue: 0,0:01:02.50,0:01:07.53,Default,,0000,0000,0000,,하지만 나만의 함수들을 만들어서 \N내 프로그램들 안에서 사용하는 것도 가능합니다 Dialogue: 0,0:01:07.53,0:01:14.02,Default,,0000,0000,0000,,예를 들어 우리가 프로그램을 만들고 있고\NWinston을 여러 번 그리려고 합니다\N Dialogue: 0,0:01:14.02,0:01:20.23,Default,,0000,0000,0000,,아마도 Winston의 인생 이야기를 하려는데 \N각 나이에서의 그를 보여주기 위해서겠죠 Dialogue: 0,0:01:20.23,0:01:24.24,Default,,0000,0000,0000,,우선 Winston을 그리는 코드는 이렇게 시작했죠 Dialogue: 0,0:01:24.24,0:01:28.63,Default,,0000,0000,0000,,우선 얼굴의 중심 위치를 저장하기 위한 \NfaceX와 faceY라는 변수(variable)을 가지고 있고 Dialogue: 0,0:01:28.63,0:01:32.71,Default,,0000,0000,0000,,눈이나 입도 이 변수를 가지고 \N상대적으로 위치를 구하여 그리고 있어요 Dialogue: 0,0:01:32.71,0:01:39.70,Default,,0000,0000,0000,,이 프로그램의 코드를 보면, 이것은 어떤 함수에도 들어가 있지 않아요\N그래서 이것을 실행하면 단순하게 딱 한 번만 실행될 거에요 Dialogue: 0,0:01:39.70,0:01:49.34,Default,,0000,0000,0000,,그럼 이것을 함수로 바꾸어보죠 그 방법은 변수를 선언하는 방식과\N매우 비슷해요 왜나하면 정말로 해야줘야 할 것이 비슷하거든요 Dialogue: 0,0:01:49.34,0:01:54.53,Default,,0000,0000,0000,,우선 'var drawWinston'라는 멋지고 알기쉬운 이름을 적습니다 Dialogue: 0,0:01:54.53,0:02:02.96,Default,,0000,0000,0000,,그 다음 '='를 입력합니다 하지만 그 뒤에는 숫자나 \N문자열(string)을 쓰지 않고 'function'이라는 단어를 써줍니다 Dialogue: 0,0:02:02.96,0:02:11.26,Default,,0000,0000,0000,,그리고 빈 괄호( )를 적고 그 다음에 중괄호 { } \N그리고 세미콜론 ';'을 적어줍니다 Dialogue: 0,0:02:11.26,0:02:18.93,Default,,0000,0000,0000,,그러고 나서 함수에서 하고 싶은 작업을 모두 중괄호들 사이에 넣어줍니다. Dialogue: 0,0:02:18.93,0:02:26.79,Default,,0000,0000,0000,,여기있는 코드들을 우리의 함수 안에 넣어주면 되겠네요\N보기 쉽게 들여쓰기(indent)도 해줍시다 Dialogue: 0,0:02:26.79,0:02:33.17,Default,,0000,0000,0000,,우리는 지금 함수를 저장하고 있는 변수를 가지게 되었습니다\N간단하게 말하면 우리는 이 코드 덩어리에 이름을 지어준 것이지요 Dialogue: 0,0:02:33.17,0:02:37.44,Default,,0000,0000,0000,,그리고 이것을 가지고 우리의 프로그램에서\N언제든지 다음과 같이 말할 수 있습니다 Dialogue: 0,0:02:37.44,0:02:43.76,Default,,0000,0000,0000,,'이 이름을 가지고 코드 덩어리를 찾아서 그것을 실행해'와 같이 말이죠\N그러므로 우리는 이 코드들을 언제든지 다시 재사용할 수 있습니다 Dialogue: 0,0:02:43.76,0:02:49.22,Default,,0000,0000,0000,,하지만 지금 화면을 보면 Winston이 더 이상 보이지 않아요\NWinston을 잃어버렸어요 어디로 갔을까요? Dialogue: 0,0:02:49.22,0:02:52.100,Default,,0000,0000,0000,,이는 코드를 함수 안에 넣었기 때문이며 Dialogue: 0,0:02:52.100,0:03:00.99,Default,,0000,0000,0000,,이것은 프로그램에게 "이 코드들을 나중에 실행 할 수 있게 해줘,\N오직 내가 '말 할때' 실행해야해"라고 말한 것이거든요 Dialogue: 0,0:03:00.99,0:03:09.40,Default,,0000,0000,0000,,그러므로 코드를 실행해달라고 말해야 하고 이것은 함수를 호출(call)한다는\N것을 의미합니다 ellipse()나 rect() 그리고 line()같이말이죠 Dialogue: 0,0:03:09.40,0:03:21.07,Default,,0000,0000,0000,,그러므로 단순히 그 함수의 이름을 쓰고 그 뒤에 괄호를 붙인다음\N세미콜론으로 마무리를 하면... Winston이 돌아왔어요! Dialogue: 0,0:03:21.07,0:03:29.67,Default,,0000,0000,0000,,제 생각에는 이것이 멋지지만, 여러분들이 생각하기에는 멋지지 않을수도 있어요\N왜냐하면 우리가 예전에 만든 프로그램과 다르지 않기 때문이죠 웃기지않나요? Dialogue: 0,0:03:29.67,0:03:40.100,Default,,0000,0000,0000,,함수에서 가장 중요한 점은 우리가 함수를 다시 재사용할수 있다는 것이에요\N단순히 함수를 호출하는 부분을 복사해서 붙여넣고 붙여넣고 실행하면... Dialogue: 0,0:03:40.100,0:03:50.92,Default,,0000,0000,0000,,음... 똑같아 보이는데요? 하지만 정상적으로 작동한 것입니다\NWinston을 똑같은 위치에 계속 그렸기때문에 이렇게 보이는 것이지요 Dialogue: 0,0:03:50.92,0:03:59.63,Default,,0000,0000,0000,,만일 X-ray같은 눈을 가졌다면 3명의 Winston들을 볼 수 있을거에요\N하지만 우린 그런 눈을 가지고 있지 않으므로 알 수 없는것입니다 Dialogue: 0,0:03:59.63,0:04:04.84,Default,,0000,0000,0000,,하지만 함수에 작은 변화를 주는 것으로 \N여러개를 그리고 있다는 것을 분명하게 확인할 수 있을거에요 Dialogue: 0,0:04:04.84,0:04:14.74,Default,,0000,0000,0000,,우선 faceX와 faceY를 보세요항상 202와 208으로 설정되지요?\N이를 함수가 불릴때마다 random()을 이용하여 Dialogue: 0,0:04:14.74,0:04:27.05,Default,,0000,0000,0000,,50과 350사이의 임의의 수로 바꾸어 실행되도록하면 'restart'버튼을\N누를때마다 랜덤한 위치에 그러지는 Winston들을 볼 수 있어요 Dialogue: 0,0:04:27.05,0:04:38.40,Default,,0000,0000,0000,,제 생각에 이것은 매우 멋지네요. 함수를 사용하지 않고 윈스턴을\N세번이나 그리려했다면 더욱 많은 코드를 입력했었어야 했을테니까요 Dialogue: 0,0:04:38.40,0:04:45.94,Default,,0000,0000,0000,,하지만 이것은 항상 유용하다고는 할 수 없어요. 왜냐하면 만일 임의의 위치에 \N윈스턴들이 그려지는 것을 원치 않고 특정한 위치에 윈스턴을 그리고 싶을수도 있어요 Dialogue: 0,0:04:45.94,0:04:50.20,Default,,0000,0000,0000,,그러므로 우리는 다음시간에 함수들에게 매개변수(parameter)를\N Dialogue: 0,0:04:50.20,0:04:55.29,Default,,0000,0000,0000,,어떻게 전달하는지 알아볼겁니다 그러고 나면 \N특정 위치에 그릴 수 있을 거에요