자바스크립트 공부하다가 머리가 좀 아파서 질문 올려요. 처음에 튜토리얼 볼 때는 "자바스크립트는 클래스가 없다, 프로토타입 기반 언어다" 이렇게 배웠거든요. 근데 정작 요즘 코드 보면 class 키워드가 막 나와요. 이게 대체 뭔 상황인지 모르겠어요.
일단 프로토타입이라는 게 뭔지부터 헷갈려요. MDN 보니까 모든 객체가 __proto__ 라는 걸 가지고 있고 그걸 타고 올라가면서 속성을 찾는다는데, 콘솔에서 이것저것 찍어봤어요.
const arr = [1, 2, 3];
console.log(arr.__proto__ === Array.prototype); // true
console.log(Array.prototype.__proto__ === Object.prototype); // true
이게 무슨 사슬처럼 연결돼 있다는 건 대충 알겠는데, 그래서 실제로 상속을 하려면 어떻게 하는 건가요? 예전 방식으로 이렇게 하는 건 봤어요.
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + " makes a sound");
};
근데 이렇게 하면 상속받는 자식은 또 prototype 어쩌고를 계속 이어붙여야 하던데 너무 복잡하더라고요. 그러다가 class 문법을 보니까 훨씬 깔끔해 보였어요.
class Dog extends Animal {
speak() {
console.log(this.name + " barks");
}
}
제가 정리가 안 되는 부분이 이거예요. class 라는 게 그냥 프로토타입 방식을 보기 좋게 감싼 껍데기일 뿐인가요? 아니면 진짜로 다른 언어처럼 클래스가 새로 생긴 건가요? 실제 내부에서는 여전히 프로토타입으로 돌아가는 거예요? 그리고 실무에서는 그냥 class 쓰면 되는 건지, 아니면 프로토타입 개념을 확실히 알고 있어야 하는 건지도 궁금해요. 초보 티 나는 질문이라 죄송한데 이 부분만 명확해지면 속이 시원할 것 같아요.