[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.78,0:00:06.23,Default,,0000,0000,0000,,저번 시간에는 객체 타입을 만들고 두 개의\N윈스턴 객체를 만들었어요 Dialogue: 0,0:00:06.23,0:00:09.23,Default,,0000,0000,0000,,생성자를 이용해서 초기화도 했죠 Dialogue: 0,0:00:09.23,0:00:13.47,Default,,0000,0000,0000,,그리고 객체 타입은 속성에만 꼭 관련될 필요는 없어요 Dialogue: 0,0:00:13.47,0:00:18.81,Default,,0000,0000,0000,,함수와 관련되어도 되지요\N모든 속성이 내장되어 있는 객체를 생각해 보세요 Dialogue: 0,0:00:18.81,0:00:26.29,Default,,0000,0000,0000,,사람과 같이 말이죠. 우린 키와 나이도 갖고 있지만\N수면, 밥먹기, 프로그래밍과 같은 활동도 할 수 있어요 Dialogue: 0,0:00:26.29,0:00:30.33,Default,,0000,0000,0000,,우린 이제 이런 객체 타입을 함수와 연관시키려고 해요 Dialogue: 0,0:00:30.94,0:00:35.95,Default,,0000,0000,0000,,이 프로그램은 저번에 끝냈던 프로그램 그대로인데요\N여기 함수가 있어요 Dialogue: 0,0:00:35.95,0:00:43.07,Default,,0000,0000,0000,,{\i1}drawWinston{\i0} 두 개의 윈스턴 객체에서 모두 부른 함수예요\N이러면 더 편하지 않을까요? Dialogue: 0,0:00:43.07,0:00:48.57,Default,,0000,0000,0000,,윈스턴 객체 타입으로 함수를 넣어버리면 말이예요\N생각보다 쉬워요 Dialogue: 0,0:00:48.57,0:00:55.72,Default,,0000,0000,0000,,생성자 밑에 {\i1}Winston.prototype{\i0}이라 쓸게요 Dialogue: 0,0:00:55.72,0:00:59.23,Default,,0000,0000,0000,,프로토타입이라는 말을 처음 들어 볼 텐데요 Dialogue: 0,0:00:59.23,0:01:05.88,Default,,0000,0000,0000,,프로토타입은 함수로써 표현한 객체의 특성입니다 Dialogue: 0,0:01:05.88,0:01:13.31,Default,,0000,0000,0000,,즉, 모든 인스턴스들이 모두 이 함수를 갖게 됩니다 Dialogue: 0,0:01:13.31,0:01:19.61,Default,,0000,0000,0000,,그럼 {\i1}"prototype."{\i0} 다음에 함수 이름을 쓰고요\N여기서는 {\i1}draw{\i0}겠죠? Dialogue: 0,0:01:19.61,0:01:25.61,Default,,0000,0000,0000,,밑에 있는 {\i1}drawWinston{\i0} 코드를 가지고 와서 Dialogue: 0,0:01:25.61,0:01:32.95,Default,,0000,0000,0000,,이 안에 넣을게요\N지금 우리는 {\i1}draw{\i0} 함수를 Dialogue: 0,0:01:32.95,0:01:40.01,Default,,0000,0000,0000,,윈스턴 프로토타입에 넣었어요\N이제 윈스턴 타입 객체에서 언제든 {\i1}draw{\i0} 함수를 호출할 수 있을 거예요 Dialogue: 0,0:01:40.01,0:01:45.41,Default,,0000,0000,0000,,이제 우리는 {\i1}draw{\i0} 함수를\N{\i1}winstonTeen{\i0}과 {\i1}winstonAdult{\i0}에 대해 호출해야 됩니다 Dialogue: 0,0:01:45.41,0:01:49.57,Default,,0000,0000,0000,,이런 식으로 함수를 만들면\N객체에서도 호출을 할 수 있습니다 Dialogue: 0,0:01:49.57,0:01:54.83,Default,,0000,0000,0000,,이런 함수를 정확한 명칭으로 "메소드"라고 부릅니다\N저는 앞으로 메소드라고 부를게요 Dialogue: 0,0:01:54.83,0:01:58.27,Default,,0000,0000,0000,,그러면 이건 {\i1}"draw method"{\i0} 겠죠? Dialogue: 0,0:01:58.27,0:02:04.10,Default,,0000,0000,0000,,전에 썼던 코드는 다 지워버리고\N우리가 만든 함수를 호출할 수 있는지 확인해 봅시다 Dialogue: 0,0:02:04.10,0:02:07.07,Default,,0000,0000,0000,,{\i1}winstonTeen.draw(){\i0} Dialogue: 0,0:02:07.07,0:02:13.70,Default,,0000,0000,0000,,오류가 나네요\N{\i1}winstObject{\i0}가 정의가 안 되었습니다 Dialogue: 0,0:02:13.70,0:02:20.53,Default,,0000,0000,0000,,{\i1}winstObject{\i0} 인수를 {\i1}drawWinston{\i0}에 전달하기 전에 Dialogue: 0,0:02:20.53,0:02:26.46,Default,,0000,0000,0000,,지금은 전달되는 인수가 없으니까\N이렇게 바꿔주면 Dialogue: 0,0:02:26.46,0:02:30.82,Default,,0000,0000,0000,,봅시다 여기에 뭐가 전달되어야 하죠?\N{\i1}winstonTeen{\i0}을 전달 할게요 Dialogue: 0,0:02:30.82,0:02:38.44,Default,,0000,0000,0000,,실행되었어요 하지만 좀 이상하지 않나요?\N객체 스스로 객체를 그리는데 Dialogue: 0,0:02:38.44,0:02:43.96,Default,,0000,0000,0000,,객체 자체를 인수로 전달받고 있어요\N불필요해 보이네요 Dialogue: 0,0:02:43.96,0:02:48.46,Default,,0000,0000,0000,,맞아요 하지 않아도 되요 지워버릴게요\N이제 생각해봅시다 Dialogue: 0,0:02:48.46,0:02:54.40,Default,,0000,0000,0000,,객체 안에서 객체의 속성을 참조하려면 어떻게 해야죠? Dialogue: 0,0:02:54.40,0:03:00.37,Default,,0000,0000,0000,,글쎄요 전에 생성자에서 썼던 특별한 키워드\N{\i1}this{\i0}를 기억하나요? 아~ Dialogue: 0,0:03:00.37,0:03:08.57,Default,,0000,0000,0000,,이것(this)을 {\i1}this{\i0}로 바꾸면 어떨까요? (웃음)\N{\i1}winstObject{\i0}를 {\i1}this{\i0}로 바꿔줍시다 Dialogue: 0,0:03:08.57,0:03:12.95,Default,,0000,0000,0000,,우린 객체 안에 있으니까요\N함수가 객체 안에서 구동되니, Dialogue: 0,0:03:12.95,0:03:16.86,Default,,0000,0000,0000,,현재 객체에서 자신을 부르기 위해서는\N{\i1}this{\i0}를 써야 할 거예요 Dialogue: 0,0:03:16.86,0:03:23.27,Default,,0000,0000,0000,,우린 {\i1}this{\i0}를 현재 객체의 모든 속성에 접근하기 위해 사용했어요 Dialogue: 0,0:03:23.27,0:03:26.72,Default,,0000,0000,0000,,그리고 제대로 작동했어요\N엄청 좋지 않나요? Dialogue: 0,0:03:26.72,0:03:31.91,Default,,0000,0000,0000,,이제 우리는 {\i1}winstonAdult.draw(){\i0}라고 쓸 수 있을 거예요 Dialogue: 0,0:03:31.91,0:03:38.27,Default,,0000,0000,0000,,짜잔 객체에서 호출이 되기 때문에\N{\i1}winstonAdult{\i0} 속성에 접근할 수 있어요 Dialogue: 0,0:03:38.27,0:03:45.75,Default,,0000,0000,0000,,{\i1}this{\i0}라는 키워드가 되게 좋아보이지 않나요?\N가끔씩 헷갈려도 말이지요 Dialogue: 0,0:03:45.75,0:03:52.03,Default,,0000,0000,0000,,좋아요 이것도 재미 있었는데 다른 메소드도 새로 만들어 볼게요\N윈스턴이 뭘 할 수 있을까요? Dialogue: 0,0:03:52.03,0:04:01.08,Default,,0000,0000,0000,,말을 합니다 그럼 우리는 {\i1}Winston.prototype.talk{\i0}를 쓰고요\N이렇게 넣을수록 프로토타입에는 많은 메소드가 들어가 있겠죠? Dialogue: 0,0:04:01.08,0:04:05.24,Default,,0000,0000,0000,,이렇게 말합니다\N{\i1}"I'm Winston"{\i0} Dialogue: 0,0:04:05.24,0:04:12.18,Default,,0000,0000,0000,,위치를 {\i1}this.x+20{\i0} 과 {\i1}this.y+150{\i0} 으로 할게요 Dialogue: 0,0:04:13.18,0:04:19.73,Default,,0000,0000,0000,,알다시피 아무것도 일어나지 않았어요\N내가 아직 함수를 호출하지 않았으니까요 Dialogue: 0,0:04:19.73,0:04:25.07,Default,,0000,0000,0000,,{\i1}teen{\i0}이 말을 하도록 할게요 {\i1}winstonTeen.talk(){\i0} Dialogue: 0,0:04:25.07,0:04:30.48,Default,,0000,0000,0000,,나는 윈스턴이예요 짜잔\N이제 {\i1}winstonAdult.talk(){\i0} Dialogue: 0,0:04:30.48,0:04:36.83,Default,,0000,0000,0000,,짜잔, 좋아요 이제 윈스턴 타입으로\N속성에는 닉네임과 Dialogue: 0,0:04:36.83,0:04:45.03,Default,,0000,0000,0000,,나이, x, y가 있고요\N함수에는 메소드가 속성을 토대로 행동을 합니다 Dialogue: 0,0:04:45.03,0:04:50.76,Default,,0000,0000,0000,,이제 우리는 윈스턴 인스턴스를 가능한 많이 만들고 \N어떠한 메소드든지 간에 호출할 수 있겠죠? Dialogue: 0,0:04:50.100,0:04:54.00,Default,,0000,0000,0000,,괜찮지 않나요?