Daehyunii's Dev-blog

<모던자바스크립트 19장 프로토타입> TIL-34 본문

✏️ 2022. TIL/July

<모던자바스크립트 19장 프로토타입> TIL-34

Daehyunii 2022. 7. 13. 22:26

  오늘은 프로토타입에 대해서 공부했다. 프로토타입을 이해하는데 정말 힘들었다. 일단, 책을 읽는 것부터가 많이 힘들었던 것 같다. 프로토타입 관련 내용들도 적지 않았기에 책을 읽을때 조금만 집중을 느슨하게 하면 무슨 뜻인지 이해할 수 없을 정도로 헷갈렸다. 우선 가장 집중했던 것은 단어 하나하나의 온전한 뜻에 집중해서 책을 읽었고, 그 결과 어느정도 성공적으로 프로토타입을 정리할 수 있었다.

 

  앞에서 계속 공부하면서 간혹 등장했던 문장 중 하나는 '자바스크립트는 프로토타입 기반 객체지향 프로그래밍 언어'라는 문장을 접할 수 있었는데, 그 당시만 해도 그게 무슨 뜻인지 전혀 알지도 못했으나, 프로토타입을 공부하면서 객체지향 프로그래밍이 무엇인지 어느정도 알 수 있었다. 우선 객체는 속성을 가진다. 그러한 속성을 표현한 것이 상태 데이터인 프로퍼티이고 이러한 상태 데이터를 활용하여 동작하는 것이 메서드이다. 결국 객체는 상태 데이터인 프로퍼티와 이를 활용하여 동작하는 메서드로 구성되는 독립적인 단위이고, 이런 객체들의 집합을 가지고 프로그래밍을 표현하는것이 객체지향 프로그래밍이다. 또한 독립적 단위인 객체들은 서로 관계성을 가지고 데이터로 서로 주고 받으며 활용하는데, 그 중에서도 가장 중요한 것은 바로 '상속'이라는 개념이다. 상속은 파이썬을 공부하면서 한 번 알아둔 개념이기는 했으나, 정확하게 어떤 로직에 의해서 돌아가는지는 알 수 없었다. 하지만 지금은 자바스크립트에 있어서 '상속'이라는 개념을 명확하게 이해할 수 있게 되었다. 자바스크립트에서 '상속'을 구현하기 위해 프로토타입이라는 개념을 만들었고, 이를 통해 상속을 구현한다. 이것이 바로 자바스크립트가 프로토타입 기반 객체지향 언어인 이유다. 또한 상속은 굉장히 효율적인 방법이다. 프로그램을 만들면서 만들어 지는 수많은 객체들의 필요한 동일한 코드들만 따로 프로토타입이라는 부모 객체에 넣어 놓고, 모든 자식 객체들이 이를 활용한다면 개발자의 입장에서도 굉장히 편리하고, 컴퓨터의 입장에서도 굉장이 경제적인 방법일 것이다. 그러나 아직 궁금증이 해결되지 않은 부분은, 클래스 기반 객체지향 언어보다 프로토타입 기반 객체지향 언어가 가지는 장점이 많다고 했는데, 아직 클래스를 정확하게 배우지 않았기에 어떤 점에서 더 좋은 장점들을 가지고 있는지는 모르겠다. 이 부분에 대해서는 뒤에 클래스를 공부하고 비교해 보아야겠다.

 

 오늘 공부한 내용들을 몇 문장으로 정리해 보자면

 

1. 생성자 함수는 prototype 프로퍼티를 통해 생성자 함수가 생성할 인스턴스의 프로토타입을 가리킨다.

2. 모든 객체는 하나의 프로토타입을 갖는다.

3. 모든 프로토타입은 생성될 때 constructor 프로퍼티를 갖는다. (constructor 프로퍼티는 해당 생성자 함수를 가리킨다.)

4. 프로토타입의 종점은 Object.prototype 이다.

5. 프로토타입의 프로토타입은 Object.prototype 이다.

6. 모든 객체는 Object.prototype의 프로퍼티/메서드를 상속받는다.(직접상속제외)

7. 프로토타입에 접근하는 방법에는 두 가지가 있다. 생성자 함수의 prototype 프로퍼티를 통해 접근할 수 있고, Object.prototype의 접근자 프로퍼티인 __proto__를 통해 프로토타입에 접근하고자 하는 객체에서 접근할 수 있다.

8. 프로토타입도 객체이기 때문에 프로퍼티/메서드를 추가 삭제 또는 변경도 할 수 있다.

9. 프로토타입의 생성시점은 생성자 함수 정의가 평가되었을때 같이 생성된다. 

10. 리터럴에 의해 생성된 객체는 빌트인 생성자 함수의 prototype 프로퍼티를 프로토타입으로 갖는다.

11. 생성자 함수도 객체이기 때문에 프로퍼티/메서드를 가질 수 있는데, 이를 정적 프로퍼티/정적 메서드라고 한다.

12. 프로퍼티를 활용할 수 있는 연산자들과 메서드들이 있고, 주의해야 할 것은 상속받은 프로퍼티와 메서드까지 같이 확인하는 연산자가 있고, 반대로 객체 고유의 프로퍼티/메서드만 확인할 수 있는 메서드가 있다.

 

이정도로 정리할 수 있을것 같다. 프로토타입과 관련된 내용은 정말 많지만, 가장 중요한 핵심적인 내용들만 정확하게 기억한다면 시간이 지나 잊어버리게 되는 내용도 금방 다시 습득할 수 있을것 같다.

 

2022.07.13 - [언어 공부 및 정리/자바스크립트[모던자바스크립트]] - 19장 프로토타입

 

19장 프로토타입

자바스크립트는 프로토타입 기반의 객체지향 프로그래밍 언어다. 자바스크립트는 객체 기반의 프로그래밍 언어이며 자바스크립트를 이루고 있는 거의 '모든 것'이 객체다.(원시 타입의 값 제외

pinetree93.tistory.com