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

mhr님의 프로필 이미지

작성한 질문수

코어 자바스크립트

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

extendClass 함수 구현시 IIFE를 사용하는 것과 그냥 일반 함수를 사용하는 것의 차이가 무엇인지 궁금합니다.

해결된 질문

작성

·

214

0

var extendClass1 = (function() {
  function Bridge() {}
  return function(Parent, Child) {
    Bridge.prototype = Parent.prototype;
    Child.prototype = new Bridge();
    Child.prototyep.constructor = Child;
  }
})();

var extendClass2 = function() {
  function Bridge() {}
  return function (Parent, Child) {
    Bridge.prototype = Parent.prototype;
    Child.prototype = new Bridge();
    Child.prototype.constructor = Child;
  }
}

var extendClass3 =function (Parent, Child) {
  function Bridge(){};
  Bridge.prototype = Parent.prototype;
  Child.prototype = new Bridge();
  Child.prototype.constructor = Child;
}

위의 extendClass1, 2, 3의 차이가 무엇인지 궁금합니다. 

답변 3

3

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

extendClass1는 최초 변수를 선언하고 값을 할당하는 시점에 이미 Bridge 함수가 생성되어 클로저로 기억됨에 따라, 이후에 클래스 상속이라는 동작을 수행하고자 할 때마다 '이미 생성된' Bridge 함수를 재활용함으로써 메모리 관리에 이점이 있습니다.

extendClass2는 엄밀히는 아직 클래스 상속 동작을 수행할 수 있는 단계는 아닙니다. 이를 한 번 실행한 결과를 다른 변수에 담았을 때 비로소 클래스 상속이 가능하겠네요.

예를 들어 var extendClass22 = extendClass2(); 라고 하면, 이제 extendClass22는 extendClass1과 동일한 방식으로 동작하게 될 것입니다.

extendClass3은 extendClass1에 대해 설명드린 걸과 정확히 반대의 방식으로 동작하게 됩니다.

즉 클래스상속을 하고자 할 때마다 매번 새로운 Bridge함수를 만들게 되므로 불필요한 메모리를 차지하게 될 것입니다.

0

저도 1,2번 궁금해서 실행해봤는데, 설명해주신대로 해야 정상동작하더라구요. 이부분이 저도 조금 헷갈렸는데, 앞부분에서 설명해주신 함수표현식 강좌 다시보니 명확해 졌습니다.

감사합니다.

0

mhr님의 프로필 이미지
mhr
질문자

감사합니다!

mhr님의 프로필 이미지

작성한 질문수

질문하기