Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 상속에서 Object.create와 new의 차이점 완벽 정리

Object.create와 new의 핵심 차이

JavaScript에서 프로토타입 상속을 구현할 때 Object.create()new 연산자는 겉보기에 비슷해 보이지만, 내부적으로는 완전히 다른 방식으로 동작합니다. 두 방법의 차이를 예제를 통해 살펴보겠습니다.

첫 번째 예제: Object.create() 사용 — 프로토타입만 상속

다음 코드는 amitBaseClass프로토타입만 상속받는 경우입니다.

function SomeClass() {
}

SomeClass.prototype = Object.create(amitBaseClass.prototype);

Object.create(amitBaseClass.prototype)은 지정된 프로토타입 객체를 기반으로 새로운 객체를 생성합니다. 이때 생성자 함수는 실행되지 않으며, 오직 프로토타입 체인만 연결됩니다. 즉, 순수한 상속 관계만 형성할 수 있어 불필요한 초기화 로직이나 부수 효과(side effect)를 피할 수 있습니다.

두 번째 예제: new 연산자 사용 — 전체 객체 상속

반면 다음 코드는 생성자 함수를 실제로 실행하는 경우입니다.

function SomeClass () {
}

SomeClass.prototype = new amitBaseClass ();

new amitBaseClass()amitBaseClass의 인스턴스를 하나 생성하고, 그 과정에서 생성자 함수 본문까지 함께 실행합니다. 따라서 자식 클래스는 부모의 프로토타입뿐만 아니라, 인스턴스 레벨에 정의된 모든 속성과 메서드까지 통째로 상속받게 됩니다.

결론: 두 방법은 서로 다른 역할을 한다

결국 두 방식은 각각 다른 목적을 수행하며, 어느 것이 우월하다기보다는 상황에 따라 선택 기준이 달라집니다.

  • Object.create(): 생성자 실행 없이 순수하게 프로토타입 체인만 설정하고 싶을 때 적합합니다. 특히 부모 생성자에 파라미터나 초기화 로직이 있어도 이를 건너뛸 수 있습니다.
  • new: 부모 생성자의 초기화 로직까지 함께 상속해야 하고, 인스턴스 속성들도 그대로 물려받고 싶을 때 사용합니다.

현대 JavaScript 개발에서는 일반적으로 Object.create()를 활용한 상속이 더 안전하고 예측 가능한 구조를 만드는 데 유리한 것으로 평가받습니다. 다만 ES6의 classextends 문법을 사용하면 이러한 저수준 처리를 대신 수행해 주므로, 최신 환경이라면 해당 문법 도입도 고려해 보시기 바랍니다.