Object는 왜 생성자에 메소드가 많을까??

IT공부중·2020년 8월 24일
0

JavsScript

목록 보기
7/22
post-thumbnail

Object 생성자는 유독 다른 생성자 보다 메소드가 많은 것 같다. 착각일까? 한번 알아보자
콘솔창에 Array. 해서 메소드들을 보면 몇 개 없다. 대부분 Array.prototype에 메소드들이 있는 것을 볼 수 있다. String이나 Number 등도 마찬가지로 생성자 보다는 대부분 prototype에 메소드들이 들어있다. 하지만 Object. 을 하여 메소드들을 확인하면 엄청 많은 것을 알 수 있다. 반면에 Object.prototype에는 메소드들이 몇개 없다. 왜 그런 것일까?

자바스크립트는 prototype 기반 언어이다. prototype chain을 통해 타고 타고 올라가 메소드들을 사용할 수 있다. Object.prototype은 모든 타입들의 어머니라고 볼 수 있다. 모든 prototype들의 마지막 종착지는 Object.prototype이다. 모든 타입들은 Object.prototype의 메소드를 사용할 수 있다는 것이다. 그래서 toString 같은 메소드들을 사용할 수 있는 것이다. 그런데 Object타입에만 사용할 수 있는 메소드들을 Object.prototype에 넣어 둔다면 모든 타입에서 사용해버려서 에러가 완전 많이 날 것이다. 어쩔 수 없이 Object에서만 사용하는 메소드들은 Object의 생성자에 static 메소드로 만들어 둔 것이다. 따라서 Object의 메소드들은 대부분 Object.keys(object) Object.entries(object) 이런식으로 사용해야한다.

Array의 경우를 보자. Array는 자기 자신만으로 존재한다. 아무도 자신을 chaining 하고 있는 타입이 없다. 그래서 prototype에 메소드들을 만들어두어도 상관 없다. 그래서 Array.prototype.filter Array.prototype.forEach 등으로 사용한다. prototype에 있기 때문에 const array = [1,2,3,4] 로 만들고 array.forEach array.filter 등으로 사용 가능하다. String이나 Number 등의 타입 또한 마찬가지이다. 이런 타입들의 생성자에는 그 타입이 맞는지? 그 타입으로 바꾸는 등의 메소드가 대부분이다.

Object는 다른 타입들의 부모이다. 그만큼 중요한 타입이라고 할 수 있다. 그래서 Object의 메소드들은 대부분 prototype 보다는 생성자 함수의 static 메소드에 존재한다. 헷갈리지 않고 잘 기억해서 사용하도록 하자..!

profile
4년차 프론트엔드 개발자 문건우입니다.

0개의 댓글