상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 자바스크립트에서 함수의 프로토타입(Prototype)과 상속(Inheritance)은 어떻게 작동하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
<a href='https://sangseek.com/sangseeks/자바/ko'>자바</a>스크립트에서 함수의 프로토타입(Prototype)과 상속(Inheritance)은 객체 지향 프로그래밍의 중요한 개념으로, 자바스크립트의 유연한 객체 모델을 이해하는 데 필수적입니다. 자바스크립트는 프로토타입 기반 언어로, 클래스 기반 언어와는 다른 방식으로 객체를 생성하고 상속을 구현합니다. 아래에서 이 두 개념을 자세히 설명하겠습니다. 1. 프로토타입(Prototype) 자바스크립트에서 모든 객체는 다른 객체를 참조할 수 있는 `[[Prototype]]`이라는 내부 속성을 가지고 있습니다. 이 속성은 객체가 다른 객체의 속성과 메서드를 상속받을 수 있게 해줍니다. 프로토타입은 객체의 '템플릿' 역할을 하며, 객체가 생성될 때 해당 객체의 프로토타입을 통해 속성과 메서드를 공유합니다. <a href='https://sangseek.com/sangseeks/프로토타입 체인/ko'>프로토타입 체인</a> 자바스크립트의 프로토타입 체인은 객체가 속성이나 메서드를 찾을 때 사용하는 메커니즘입니다. 객체가 특정 속성을 찾으려고 할 때, 자바스크립트는 먼저 해당 객체의 자신의 속성을 확인하고, 그 속성이 없으면 `[[Prototype]]`을 통해 부모 객체(프로토타입)의 속성을 확인합니다. 이 과정을 계속 반복하다가 최종적으로 `null`에 도달할 때까지 진행됩니다. ```javascript function Person(name) { this.name = name; } Person.prototype.greet = function() { console.log(`Hello, my name is ${this.name}`); }; const alice = new Person('Alice'); alice.greet(); // Hello, my name is Alice ``` 위의 예제에서 `Person` 함수는 생성자 함수로 사용되며, `greet` 메서드는 `Person`의 프로토타입에 추가됩니다. `alice` 객체는 `greet` 메서드를 호출할 수 있는데, 이는 `alice`의 프로토타입 체인을 통해 `Person.prototype`에서 메서드를 찾기 때문입니다. 2. 상속(Inheritance) 자바스크립트에서 상속은 주로 프로토타입을 통해 이루어집니다. 객체는 다른 객체의 속성과 메서드를 상속받을 수 있으며, 이를 통해 코드의 재사용성을 높이고, 객체 간의 관계를 정의할 수 있습니다. 프로토타입 상속 프로토타입 상속을 구현하는 방법 중 하나는 `Object.create()` 메서드를 사용하는 것입니다. 이 메서드는 주어진 객체를 프로토타입으로 하는 새로운 객체를 생성합니다. ```javascript function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(`${this.name} makes a noise.`); }; function Dog(name) { Animal.call(this, name); // Animal 생성자 호출 } // Dog의 프로토타입을 Animal의 인스턴스로 설정 Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.speak = function() { console.log(`${this.name} barks.`); }; const dog = new Dog('Rex'); dog.speak(); // Rex barks. ``` 위의 예제에서 `Dog`는 `Animal`의 하위 클래스처럼 동작합니다. `Dog`의 프로토타입은 `Animal`의 프로토타입을 참조하고 있으며, 이를 통해 `Dog` 인스턴스는 `Animal`의 메서드인 `speak`를 사용할 수 있습니다. 또한, `Dog`에서 `speak` 메서드를 오버라이드하여 개에 맞는 동작을 정의할 수 있습니다. 3. ES6 클래스 문법 ES6(<a href='https://sangseek.com/sangseeks/ECMAScript 2015/ko'>ECMAScript 2015</a>)부터는 클래스 문법이 도입되어, 보다 직관적으로 상속을 구현할 수 있게 되었습니다. 클래스 문법은 기존의 프로토타입 기반 상속을 단순화한 것입니다. ```javascript class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a noise.`); } } class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } const dog = new Dog('Rex'); dog.speak(); // Rex barks. ``` 위의 예제에서 `class` 키워드를 사용하여 `Animal`과 `Dog` 클래스를 정의했습니다. `Dog` 클래스는 `Animal` 클래스를 상속받으며, `speak` 메서드를 오버라이드합니다. 이 방식은 코드의 가독성을 높이고, <a href='https://sangseek.com/sangseeks/상속 관계/ko'>상속 관계</a>를 명확하게 표현할 수 있습니다. 결론 자바스크립트에서 함수의 프로토타입과 상속은 객체 지향 프로그래밍의 핵심 개념으로, 객체 간의 관계를 정의하고, 코드의 재사용성을 높이는 데 중요한 역할을 합니다. 프로토타입 체인을 이해하고, 이를 활용하여 상속을 구현하는 방법은 자바스크립트 개발자에게 필수적인 기술입니다. ES6의 클래스 문법은 이러한 개념을 더 직관적으로 사용할 수 있게 해주어, 현대 자바스크립트 개발에 큰 도움이 됩니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기