Return to Video

Object Inheritance (Video Version)

  • 0:01 - 0:03
    윈스턴 생성 프로그램을 가지고 시작할게요
  • 0:03 - 0:06
    새로운 개체 타입 Hopper를 추가했어요
  • 0:06 - 0:12
    호퍼가 외로워보였어요
    그래서 윈스턴이랑 똑같이 정의를 했어요
  • 0:12 - 0:16
    생성자를 이용하여 특성을 정의할 수 있고요
    그릴 수도 있으며
  • 0:16 - 0:20
    말할 수도 있고요
    제가 이번에 새롭게 추가한
  • 0:20 - 0:23
    Horray입니다
    호퍼는 축하하는 것을 좋아하는데 반면
  • 0:23 - 0:28
    윈스턴은 그렇지 않죠
    그리고 밑부분에는 Hopper 객체를 2개 생성하였습니다
  • 0:28 - 0:31
    Little Hopper와 Big Hopper로 말이죠
  • 0:31 - 0:36
    이들을 그리고 말도 할 수 있고
    만세도 할 수 있게 해줬어요
  • 0:36 - 0:37
    괜찮네요
  • 0:37 - 0:40
    여기 코드를 보면요
  • 0:40 - 0:42
    흥미로운 것을 발견할 수 있습니다
  • 0:42 - 0:52
    호퍼와 윈스턴의 코드가 유사하다는 것을 말이죠
    생성자를 보면 talk 함수가
  • 0:52 - 1:01
    예전에 우리가 썼던 윈스턴의
    talk 함수와 똑같다는 것을 알 수 있습니다
  • 1:01 - 1:04
    그리고 같은 draw 함수를 갖고 있고요
  • 1:04 - 1:08
    이 두 객체타입에는 공통점이 많습니다
  • 1:08 - 1:12
    이 세계에서는 호퍼와 윈스턴이
    매우 비슷한 특성을 갖기 때문이죠
  • 1:13 - 1:17
    컴퓨터 밖 실제 세계에서 생각해본다면
  • 1:18 - 1:20
    대부분의 객체 타입들은 유사점들을
    공유하고 있을 것입니다
  • 1:20 - 1:21
    다른 객체들과 말이죠
  • 1:21 - 1:24
    예를 들어 동물 왕국에서는
  • 1:24 - 1:28
    모든 동물은 비슷한 특성을 갖고 있습니다
    하지만 서로 다른 동물 종이 있지요
  • 1:28 - 1:32
    인간과 같이 말이죠
    인간은 동물이라는 점에서 유사성을 띄고 있지만
  • 1:32 - 1:34
    인간 고유의 특성을 가지고 있습니다
  • 1:34 - 1:35
    그래서
  • 1:35 - 1:41
    animal 타입은 human 타입에서
    상속하는 객체 타입입니다
  • 1:42 - 1:47
    주석으로 시작할게요
    우리는 animal 에 속해 있죠
  • 1:47 - 1:49
    모든 동물은 소리를 내죠
  • 1:49 - 1:51
    인간도 언어를 구사하죠
  • 1:51 - 1:55
    그래서 객체 상속의 개념은
  • 1:55 - 1:57
    프로그래밍할 때 유용합니다
  • 1:57 - 2:00
    여러 객체 상속을 자바스크립트에서
    구현할 수 있습니다
  • 2:00 - 2:03
    그래서 이제 생각해야 될 것은
  • 2:03 - 2:04
    '객체 타입으로 공유할 특성이 무엇인가' 입니다
  • 2:04 - 2:07
    그리고 그것의 이름도 생각해 봅시다
  • 2:07 - 2:09
    새로운 객체타입을 만들 것이고
  • 2:09 - 2:11
    기존의 객체를 대표해야 합니다
  • 2:11 - 2:12
    그들을 이제 creature 이라고 합시다
  • 2:12 - 2:14
    그들은 모두 생명체입니다
  • 2:14 - 2:18
    var creature = 이고요
    생성자도 필요하겠죠
  • 2:18 - 2:22
    호퍼와 윈스턴의 생성자의 내용을 복사합시다
  • 2:22 - 2:24
    좋아요
  • 2:24 - 2:27
    그러면 봅시다
  • 2:27 - 2:28
    이제
  • 2:28 - 2:30
    이제 뭘해야죠?
  • 2:30 - 2:32
    이제 "talk" 함수를 추가합시다
  • 2:32 - 2:39
    talk 함수는 호퍼에서 가져옵시다
    물론 Creature.prototype 으로 고치고요
  • 2:39 - 2:42
    좋아요
  • 2:42 - 2:45
    이제 생명체 객체 타입을 만들었어요
  • 2:45 - 2:48
    그러면 우리는 이제 호퍼도 생명체라는
  • 2:48 - 2:52
    creature 객체임을 밝혀주어야 합니다
  • 2:54 - 2:56
    여기에다가 적어줄게요
  • 2:56 - 3:04
    Hopper.prototype = Object.create(Creature.prototype)
  • 3:05 - 3:14
    이 줄이 의미하는 것은 호퍼의 프로토타입이
    생명체 프로토타입에 바탕이 된다는 것입니다
  • 3:14 - 3:22
    이제 호퍼의 함수를 호출할 때마다
    호퍼 프로토타입에서 먼저 검색하지만
  • 3:22 - 3:26
    없다면 생명체 프로토타입에서 찾아볼 것입니다
  • 3:26 - 3:29
    이것을 프로토타입 체인이라고 합니다
  • 3:29 - 3:34
    이것을 했다면 기존의 talk 함수는
    지워버려도 되겠죠?
  • 3:34 - 3:36
    호퍼에서 말이죠
  • 3:36 - 3:38
    이제 생명체 객체 타입에도 있으니깐요
  • 3:38 - 3:40
    이 함수는 프로토타입 체인으로 있겠죠
  • 3:42 - 3:43
    오호라
  • 3:43 - 3:44
    됐어요!
  • 3:44 - 3:48
    생명체 프로토타입이 호출되어서 실행이 됐어요
  • 3:49 - 3:52
    이제 윈스턴 것도 지워볼게요
  • 3:54 - 3:58
    talk라는 메소드가 없어서 오류가 나네요
  • 3:58 - 4:01
    왜 그럴까요?
    윈스턴 생성자도 있고
  • 4:01 - 4:04
    draw 도 있는데 talk 만 없어요
  • 4:04 - 4:08
    윈스턴의 프로토타입이 생명체 프로토타입이
  • 4:08 - 4:09
    되어야하는 것을 깜빡했네요
  • 4:09 - 4:11
    매우 중요한 문장이예요
  • 4:11 - 4:15
    Winston.prototype = Object.create(Creature.prototype)
  • 4:18 - 4:19
    짜잔!
  • 4:19 - 4:20
    중요한 거예요
  • 4:20 - 4:26
    생성자 바로 뒤에 이 문장을 썼고
    프로토타입에 무엇인가를 추가하기 전에 썼어요
  • 4:27 - 4:29
    보통 이런 식으로 하게 됩니다
  • 4:29 - 4:31
    시작할 때에는
  • 4:31 - 4:34
    프로토타입이 상속되어 있는 곳을 씁니다
  • 4:34 - 4:37
    그리고 나서야 프로토타입에 추가할 수 있습니다
  • 4:37 - 4:42
    왜냐하면 만약에 윈스턴이나 호퍼에게
    특별한 것이 있다면
  • 4:42 - 4:44
    생명체 프로토타입에는 없어야죠
  • 4:44 - 4:46
    그리고 이들을 사용하므로써 좋아졌네요
  • 4:48 - 4:50
    근데 아직 반복되는 코드가 남아있어요
  • 4:50 - 4:52
    생성자 코드입니다
  • 4:52 - 4:53
    맞죠? 3번이나 있어요
  • 4:53 - 4:57
    그냥 지우면 안 될까요?
  • 4:58 - 5:00
    해봅시다
  • 5:00 - 5:04
    음.. 별로 좋아보이지는 않네요
  • 5:04 - 5:07
    호퍼가 좌측상단에 있고요
    자신의 정보가 모두 사라졌어요
  • 5:07 - 5:15
    자바스크립트에서 프로토타입을 상속하더라도
    같은 생성자를 쓸 수는 없기 때문이예요
  • 5:15 - 5:19
    그러면 이런 객체들을 위한 생성자를 정의해봅시다
  • 5:19 - 5:26
    객체에서 생성자를 부르기 쉽도록 말이죠
  • 5:26 - 5:28
    우리가 해야될 것은
  • 5:28 - 5:35
    Creature.call(this, nickname, age, x, y)
  • 5:35 - 5:41
    실행되었네요
    이것이 뜻하는 바는 바로
  • 5:41 - 5:44
    creature의 생성자 함수를 부르는 것입니다
  • 5:44 - 5:50
    이 함수를 부르면 생성자 함수에 넣고 싶은 정보를
    전달이 되고
  • 5:50 - 5:54
    마치 호퍼 객체의 생성자인 듯이 호출됩니다
  • 5:54 - 5:57
    그리고 괄호 안에 있는 인자가 전달이 됩니다
  • 5:57 - 5:59
    이 인자들은 아까 호퍼가 호출받은 정보들입니다
  • 5:59 - 6:04
    마치 위의 생성자가 호퍼 속에 있는 것처럼 됩니다
  • 6:04 - 6:07
    이것이 우리가 원하는 바입니다
    실행됐어요
  • 6:07 - 6:08
    이제 우리는
  • 6:08 - 6:14
    이 문장을 윈스턴에도 붙여넣읍시다
  • 6:16 - 6:17
    성공했어요!
  • 6:17 - 6:25
    정리해볼게요 우리는 공유된 속성과 함수를
    creature라는 하나의 객체 타입에 넣었어요
  • 6:25 - 6:28
    그리고 이것을 바탕으로 2개의
    객체 타입을 만들었고요
  • 6:28 - 6:31
    이들은 몇 개의 함수를 상속받지만
    그들만의 함수도 있습니다
  • 6:31 - 6:36
    주목해야 할 점은 공유된 특성을 한 곳에서
    수정할 수 있다는 점입니다
  • 6:36 - 6:40
    만약에 age를 바꾸고 싶다면
    여기에 "+ years old" 써주면
  • 6:40 - 6:44
    모두 끝에 years old 가 붙을 거예요
  • 6:44 - 6:52
    아니면 talk 함수에 "sup"을 대입시키면
    이제 윈스턴과 호퍼도 "sup"을 외칠 거예요
  • 6:54 - 6:57
    이제 당신은 기본 객체 타입으로부터 상속시켜
    새로운 객체 타입을 만드는 방법을 알게 되었습니다
  • 6:57 - 7:01
    여러분은 '상속'이 그림, 애니메이션, 시뮬레이션 및 게임에
    유용하게 이용될 수 있음을 알 수 있어요
  • 7:01 - 7:05
    예를 들어 게임을 생각해보면
    상당히 많은 종류의 캐릭터가 있어요
  • 7:05 - 7:08
    전부 뛸 수는 있지만 몇 명은 점프를 못합니다
  • 7:08 - 7:12
    이런 예에서 상속을 적용한다면 아주 쉽게 구현할 수 있지요
  • 7:12 - 7:16
    여러분은 이것 말고도 적용방안을 생각해 낼 수 있을 것이라 믿습니다
Title:
Object Inheritance (Video Version)
Description:

more » « less
Video Language:
English
Duration:
07:17

Korean subtitles

Incomplete

Revisions