Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions 7_클래스/이영욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# 자바스크립트 class
자바스크립트의 class 문법은 클래스 기반 언어와는 달리,
prototype을 좀 더 편하게 사용할 수 있도록 자바스크립트에서 제공하는 편의 기능이다.

## 자바스크립트의 prototype과 class 언어?
자바스크립트는 prototype 기반 언어이기에 class 기반 언어와는 다르지만,
이를 class 언어의 관점에서 볼 경우 class 문법 비슷하게 느껴질 수 있다.

자바스크립트는 \_\_proto\_\_ 객체가 생성자 함수의 prototype 속성을 체이닝 하여 접근하는 것이지만
생성자 함수를 통해 prototype 객체 내부 요소를 새로운 인스턴스에 상속하는 것으로 해석할 수 있다.

스태틱 메서드 또한 인스턴스에는 상속되지 않으며, 생성자 함수를 this 로 사용할 경우에만 메서드를 통해 호출할 수 있다.
인스턴스에 정의한 메서드의 경우, 이는 프로토타입 메서드 라고 부른다.

즉, 자바스크립트에서 class 문법을 구현한 것은 프로토타입 체이닝을 잘 연결한 것으로 이해할 수 있다.

```javascript
class User {
constructor() {
this.name = "Lee"
}

getName() { // 프로토타입 메서드
console.log(this.name)
}

static sayHi() { // 스테틱 메서드
console.log("Hello World")
}
}

// User.prototype.methodName => 프로토타입 메서드 선언
// User.methodName => 스테틱 메서드 선언
```

## class 상속
프로토타입 체인을 이용하여 클래스 상속을 구현하고자 할 때, 클래스에 존재하는 값이 인스턴스에 영향을 미치지 않는것이 핵심이였다.
자바스크립트는 프로토타입 체이닝에 의해 속성을 찾지 못할경우 \_\_proto\_\_를 따라가 값을 찾는데,
이는 클래스의 값이 인스턴스의 값에 영향을 주는 것이기 때문이다.

즉 기본적으로 자식클래스가 만들어낸 인스턴스의 \_\_proto\_\_ 속성이 부모 클래스의 prototype을 참조하고,
자식클래스의 prototype에는 불필요한 속성을 남기지 않게 구현하는 것이다.

![image](https://github.com/zoeyourlife/Core-JavaScript/assets/87873821/9d06f0de-d7b0-48d8-901e-92ba389119fa)