1
00:00:00,780 --> 00:00:06,234
저번 시간에는 객체 타입을 만들고 두 개의
윈스턴 객체를 만들었어요
2
00:00:06,234 --> 00:00:09,234
생성자를 이용해서 초기화도 했죠
3
00:00:09,234 --> 00:00:13,472
그리고 객체 타입은 속성에만 꼭 관련될 필요는 없어요
4
00:00:13,472 --> 00:00:18,806
함수와 관련되어도 되지요
모든 속성이 내장되어 있는 객체를 생각해 보세요
5
00:00:18,806 --> 00:00:26,287
사람과 같이 말이죠. 우린 키와 나이도 갖고 있지만
수면, 밥먹기, 프로그래밍과 같은 활동도 할 수 있어요
6
00:00:26,287 --> 00:00:30,334
우린 이제 이런 객체 타입을 함수와 연관시키려고 해요
7
00:00:30,939 --> 00:00:35,949
이 프로그램은 저번에 끝냈던 프로그램 그대로인데요
여기 함수가 있어요
8
00:00:35,949 --> 00:00:43,066
drawWinston 두 개의 윈스턴 객체에서 모두 부른 함수예요
이러면 더 편하지 않을까요?
9
00:00:43,066 --> 00:00:48,569
윈스턴 객체 타입으로 함수를 넣어버리면 말이예요
생각보다 쉬워요
10
00:00:48,569 --> 00:00:55,725
생성자 밑에 Winston.prototype이라 쓸게요
11
00:00:55,725 --> 00:00:59,232
프로토타입이라는 말을 처음 들어 볼 텐데요
12
00:00:59,232 --> 00:01:05,881
프로토타입은 함수로써 표현한 객체의 특성입니다
13
00:01:05,881 --> 00:01:13,309
즉, 모든 인스턴스들이 모두 이 함수를 갖게 됩니다
14
00:01:13,309 --> 00:01:19,612
그럼 "prototype." 다음에 함수 이름을 쓰고요
여기서는 draw겠죠?
15
00:01:19,612 --> 00:01:25,606
밑에 있는 drawWinston 코드를 가지고 와서
16
00:01:25,606 --> 00:01:32,951
이 안에 넣을게요
지금 우리는 draw 함수를
17
00:01:32,951 --> 00:01:40,008
윈스턴 프로토타입에 넣었어요
이제 윈스턴 타입 객체에서 언제든 draw 함수를 호출할 수 있을 거예요
18
00:01:40,008 --> 00:01:45,411
이제 우리는 draw 함수를
winstonTeen과 winstonAdult에 대해 호출해야 됩니다
19
00:01:45,411 --> 00:01:49,569
이런 식으로 함수를 만들면
객체에서도 호출을 할 수 있습니다
20
00:01:49,569 --> 00:01:54,833
이런 함수를 정확한 명칭으로 "메소드"라고 부릅니다
저는 앞으로 메소드라고 부를게요
21
00:01:54,833 --> 00:01:58,272
그러면 이건 "draw method" 겠죠?
22
00:01:58,272 --> 00:02:04,103
전에 썼던 코드는 다 지워버리고
우리가 만든 함수를 호출할 수 있는지 확인해 봅시다
23
00:02:04,103 --> 00:02:07,069
winstonTeen.draw()
24
00:02:07,069 --> 00:02:13,697
오류가 나네요
winstObject가 정의가 안 되었습니다
25
00:02:13,697 --> 00:02:20,530
winstObject 인수를 drawWinston에 전달하기 전에
26
00:02:20,530 --> 00:02:26,462
지금은 전달되는 인수가 없으니까
이렇게 바꿔주면
27
00:02:26,462 --> 00:02:30,819
봅시다 여기에 뭐가 전달되어야 하죠?
winstonTeen을 전달 할게요
28
00:02:30,819 --> 00:02:38,441
실행되었어요 하지만 좀 이상하지 않나요?
객체 스스로 객체를 그리는데
29
00:02:38,441 --> 00:02:43,965
객체 자체를 인수로 전달받고 있어요
불필요해 보이네요
30
00:02:43,965 --> 00:02:48,465
맞아요 하지 않아도 되요 지워버릴게요
이제 생각해봅시다
31
00:02:48,465 --> 00:02:54,404
객체 안에서 객체의 속성을 참조하려면 어떻게 해야죠?
32
00:02:54,404 --> 00:03:00,374
글쎄요 전에 생성자에서 썼던 특별한 키워드
this를 기억하나요? 아~
33
00:03:00,374 --> 00:03:08,573
이것(this)을 this로 바꾸면 어떨까요? (웃음)
winstObject를 this로 바꿔줍시다
34
00:03:08,573 --> 00:03:12,951
우린 객체 안에 있으니까요
함수가 객체 안에서 구동되니,
35
00:03:12,951 --> 00:03:16,861
현재 객체에서 자신을 부르기 위해서는
this를 써야 할 거예요
36
00:03:16,861 --> 00:03:23,271
우린 this를 현재 객체의 모든 속성에 접근하기 위해 사용했어요
37
00:03:23,271 --> 00:03:26,720
그리고 제대로 작동했어요
엄청 좋지 않나요?
38
00:03:26,720 --> 00:03:31,907
이제 우리는 winstonAdult.draw()라고 쓸 수 있을 거예요
39
00:03:31,907 --> 00:03:38,271
짜잔 객체에서 호출이 되기 때문에
winstonAdult 속성에 접근할 수 있어요
40
00:03:38,271 --> 00:03:45,752
this라는 키워드가 되게 좋아보이지 않나요?
가끔씩 헷갈려도 말이지요
41
00:03:45,752 --> 00:03:52,028
좋아요 이것도 재미 있었는데 다른 메소드도 새로 만들어 볼게요
윈스턴이 뭘 할 수 있을까요?
42
00:03:52,028 --> 00:04:01,078
말을 합니다 그럼 우리는 Winston.prototype.talk를 쓰고요
이렇게 넣을수록 프로토타입에는 많은 메소드가 들어가 있겠죠?
43
00:04:01,078 --> 00:04:05,241
이렇게 말합니다
"I'm Winston"
44
00:04:05,241 --> 00:04:12,176
위치를 this.x+20 과 this.y+150 으로 할게요
45
00:04:13,181 --> 00:04:19,734
알다시피 아무것도 일어나지 않았어요
내가 아직 함수를 호출하지 않았으니까요
46
00:04:19,734 --> 00:04:25,068
teen이 말을 하도록 할게요 winstonTeen.talk()
47
00:04:25,068 --> 00:04:30,479
나는 윈스턴이예요 짜잔
이제 winstonAdult.talk()
48
00:04:30,479 --> 00:04:36,828
짜잔, 좋아요 이제 윈스턴 타입으로
속성에는 닉네임과
49
00:04:36,828 --> 00:04:45,026
나이, x, y가 있고요
함수에는 메소드가 속성을 토대로 행동을 합니다
50
00:04:45,026 --> 00:04:50,758
이제 우리는 윈스턴 인스턴스를 가능한 많이 만들고
어떠한 메소드든지 간에 호출할 수 있겠죠?
51
00:04:50,999 --> 00:04:54,000
괜찮지 않나요?