[JavaScript] 프로토타입 체인

KIM DA MI·2023년 3월 16일
0
post-thumbnail

프로토타입 체인 ⛓


  • 자바스크립트는 특정 객체의 프로퍼티(property)나 메서드(method)에 접근하려고 할 때 해당 객체에 접근하려는 프로퍼티 또는 메소드가 없다면 [[Prototype]]이 가리키는 링크를 따라 자신의 부모 역할을 하는 프로토타입 객체의 프로퍼티나 메소드를 차례대로 검색한다. 이것을 프로토타입 체인이라 한다.



프로토타입 상속


  • 객체 지향 프로그래밍의 특성 중 상속을 JavaScript에서 구현할 때에는 프로토타입 체인을 사용한다.
  • 예시를 들기 위해 먼저 클래스 Human의 메서드와 속성을 객체로 구현한다면 다음과 같다.

클래스 정의

  • constructor() 메소드는 Human 클래스의 생성자를 의미한다.
  • name, age, genderHuman 클래스의 속성이다.
  • eat()sleep()Human 클래스의 메소드이다.
    class Human {
        constructor(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
        eat(food) {
            this.food = food;
            return `${this.name}이(가) ${this.food}를(을) 먹습니다.`
        }
        sleep() {
             return `${this.name}이(가) 잠을 잡니다.`
        }
    }

인스턴스 사용


  • new 키워드로 객체 인스턴스를 생성할 수 있다.

  • 인스턴스 (kimcoding)는 Human라는 클래스의 고유한 속성과 메소드를 갖는다.

    let kimcoding = new Human('김코딩', 30, '남자');
    
    // 속성
    console.log(kimcoding.age); // 30
    console.log(kimcoding.gender); // 남자
    // 메서드
    console.log(kimcoding.eat('사과')); // 김코딩이(가) 사과를(을) 먹습니다.
    console.log(kimcoding.sleep()); // 김코딩이(가) 잠을 잡니다.


클래스 문법으로 상속


  • 위에서 사람을 나타내는 클래스를 만들었다. Human 클래스는 일반적인 사람이 가질 만한 특성들을 나열하고 있다.

  • 이번에는 Human을 class 문법으로 상속받아 Student 클래스를 만들어보자. 이 작업을 하위 클래스 생성이라고 부른다.

  • 하위 클래스를 만드려면 Javascript에서 extends 키워드를 통해 상속 받을 클래스를 명시하고, super() 키워드를 사용하면 코드를 좀 더 쉽게 구현할 수 있다.

    class Student extends Human {
      constructor(name, age, gender, grade) {
        super(name, age, gender);
    
        // subject and grade are specific to Teacher
        this.grade = grade;
    
      }
      learn(subject) {
        this.subject = subject;
        return `${this.name}이(가) ${this.subject}과목을 배웁니다.`
      }
    }
  • Student 인스턴스를 생성하면 이제 StudentHuman 양쪽의 메소드와 속성을 사용할 수 있다.

    let kimapple = new Student('김사과', 28, '여자', 90);
    kimapple.learn('수학'); // '김사과이(가) 수학과목을 배웁니다.'

0개의 댓글