1126 words
6 minutes
프로토타입 객체지향 언어인 자바스크립트

🔥 핵심 차이점#

1️⃣ 클래스 기반 객체지향 언어 (Java, C++)

  • 클래스를 먼저 정의하고, 해당 클래스를 기반으로 인스턴스를 생성
  • 객체(인스턴스)는 클래스에서 정의된 구조를 따른다.
  • 클래스가 객체 생성을 주도하고, 상속은 클래스 단위로 이루어진다.

2️⃣ 프로토타입 기반 객체지향 언어 (JavaScript)

  • 객체가 곧 객체를 상속한다. (클래스 없이도 상속 가능)
  • Object.create(proto), 생성자 함수, 클래스(class) 등 다양한 방식으로 객체를 만들 수 있지만,결국 모든 객체는 프로토타입 체인을 통해 상속된다.
  • 상속 구조를 직접 컨트롤할 수 있으며, 기존 객체를 기반으로 새로운 객체를 만들 수 있다.
    • 다른 언어도 그렇지 않나요?

✅ 즉, 자바스크립트에서 객체는 “클래스가 아니라 다른 객체를 기반으로 생성”되며,모든 객체는 프로토타입 체인을 따라 속성과 메서드를 상속받는다는 점이 가장 큰 차이점이야! 🚀

자바스크립트에서도 클래스 기반으로 객체 생성이 가능합니다. 이 경우에도 다른 언어와 다르게 동작하나요?#

📌 자바스크립트의 클래스(class)는 결국 프로토타입 기반!#

자바스크립트에서도 class 문법을 사용해서 객체를 생성할 수 있지만,

🚨 자바스크립트의 클래스도 결국 “프로토타입 기반”으로 동작합니다. 🚨

즉, 문법적으로는 “클래스 기반 객체 생성”처럼 보이지만, 내부적으로는 여전히 프로토타입을 사용해서 동작하는 것이 가장 큰 차이입니다.

다른 클래스 기반 언어(Java, C++ 등)처럼 완전히 독립적인 클래스 구조가 아니라, 결국 프로토타입을 통해 상속이 이루어진다는 거지!


📌 자바스크립트 class의 동작 방식#

class Person {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log(`Hello, I'm ${this.name}`);
  }
}

const person1 = new Person("홍길동");

console.log(person1.__proto__ === Person.prototype);  // ✅ true
console.log(Person.prototype.__proto__ === Object.prototype);  // ✅ true

✅ 클래스를 사용했지만, 결국 __proto__를 통해 프로토타입 체인이 연결됨

✅ 즉, class 문법은 생성자 함수와 prototype을 감싼 “문법적 편의성”일 뿐, 본질적으로 프로토타입 기반

🚀 결론#

자바스크립트에서 class를 사용해도, 결국 객체는 프로토타입을 통해 동작한다.

✅ 다른 언어처럼 완전히 독립적인 클래스 개념이 아니라, “프로토타입을 감싼 문법적 설탕(Syntactic Sugar)“일 뿐!

그렇다면 왜 이 방법을 사용하나요? 이 방법의 장점이 무엇인가요?#

자바스크립트의 프로토타입 기반 상속 방식이 다른 언어와 다른 점은,

✔ 개발자가 프로토타입을 직접 컨트롤할 수 있다는 점

✔ 클래스를 미리 선언하지 않아도 객체를 생성하고, 상속을 쉽게 구현할 수 있다는 점

다른 객체지향 언어(Java, C++ 등)에서도 상속을 통해 기존 객체(클래스)를 기반으로 새로운 객체를 만들 수 있지만,

📌 자바스크립트는 클래스 없이도 Object.create(proto) 같은 방식으로 프로토타입을 직접 지정할 수 있다는 것이 가장 큰 차이!

자바스크립트의 프로토타입 기반 상속의 핵심 장점#

1️⃣ 클래스 없이도 객체를 만들고 상속할 수 있다.

  • **Object.create(proto)**를 이용해 기존 객체를 기반으로 새로운 객체를 쉽게 생성 가능
  • 즉, 객체가 곧 객체를 상속할 수 있는 구조

2️⃣ 프로토타입을 개발자가 직접 변경할 수 있다.

  • **Object.setPrototypeOf(obj, newProto)**를 사용해 동적으로 프로토타입 변경 가능
  • 런타임에서도 객체의 동작을 수정할 수 있음

3️⃣ 더 유연한 상속 구조를 만들 수 있다.

  • 다중 상속이 불가능한 클래스 기반 언어와 달리,자바스크립트에서는 프로토타입 체인을 활용해 여러 객체를 조합하여 상속 가능
프로토타입 객체지향 언어인 자바스크립트
softourr.github.io/프로토타입-객체지향-언어인-자바스크립트.md
Author
softourr
Published at
2025-03-20