인프런 커뮤니티 질문&답변

박우림님의 프로필 이미지

작성한 질문수

코어 자바스크립트

(예전자료 - 삭제) class 상속 구현

클래스 상속 질문입니다.

해결된 질문

작성

·

184

2

Person 클래스에서 getName 과 getAge 를 정의할때 Person.prototype안에 정의하셨는데, 그렇게 해야하는 특별한 이유가 있는지요 ?

function Person(name, age) {

this.name = name || 'noname';

this.age = age || 'noage';

this.getName = function(){ return this.name; }

this.getAge = function(){ return this.age; }

}

이렇게 Person 클래스안에 바로 정의해서 쓰면 안되는 건가요 ?

직접 해보니까 메소드 상속은 똑같이 이루어 지고 해당 메소드를 바로 볼 수 있냐 아니면 prototype을 타고 위로 올라가서 봐야하냐의 차이밖에 없는거 같은데...

답변 2

5

정재남님의 프로필 이미지
정재남
지식공유자

말씀하신 대로 그정도의 차이밖에 없습니다. 그런데 그 차이가 매우 큰 결과를 초래합니다.

Person 클래스 안에서 메소드들을 직접 정의할 경우

var tom = new Person('Tom', 30);

var jack = new Person('Jack', 35);

var steve = new Person('Steve', 25);

이렇게 사람 인스턴스를 세 개 만들고 보면,

tom, jack, steve 객체 모두가 저마다 getName, getAge메소드를 직접 들고 있게 됩니다. 똑같은 함수가 여기저기 만들어진 것이죠.

인스턴스를 1000개를 생성해야 하는 상황에선 어떨까요? 메소드가 2000개가 됩니다.

인스턴스 고유의 속성을 나타내기 위해 메모리를 차지하는 것은 불가피하겠지만, 동일한 메소드를 수천개씩 만드는 것은 몹시 비효율적이겠죠. 그보다는 prototype으로 한단계 올려서 한 번만 만들고, 이를 인스턴스들이 제각각 활용하는 것이 훨씬 좋은 방법일 것입니다.

1

박우림님의 프로필 이미지
박우림
질문자

강의 중에 말씀해 주셨던 게 다시 기억이 나네요 ㅠㅠ 답변해주셔서 감사합니다.