[[Prototype]]
이 가리키는 링크를 따라 자신의 부모 역할을 하는 프로토타입 객체의 프로퍼티나 메소드를 차례대로 검색한다. 이것을 프로토타입 체인
이라 한다.Human
의 메서드와 속성을 객체로 구현한다면 다음과 같다.constructor()
메소드는 Human
클래스의 생성자를 의미한다.name
, age
, gender
는 Human
클래스의 속성이다.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
인스턴스를 생성하면 이제 Student
와 Human
양쪽의 메소드와 속성을 사용할 수 있다.
let kimapple = new Student('김사과', 28, '여자', 90);
kimapple.learn('수학'); // '김사과이(가) 수학과목을 배웁니다.'