-
[JS] JS의 내장 함수는 메서드인가?문득 든 의문점 2022. 12. 14. 15:04반응형
자바스크립트 내장함수
JS에서 내장함수란 별도의 모듈 혹은 라이브러리를 설치할 필요없이 사용할 수 있는 함수를 말한다. 예를들어 parseInt(), isNaN(), isFinite() 등이 있다.
메서드란
JS에서 메서드는 객체와 관련된 함수이다. 자바스크립트는 다양한 종류의 객체를 가지고 있으며 각각 관련된 메서드를 가진다. 예를들어 toUpperCase()는 string 타입 에서만 사용 가능한 메서드이고, push()는 array에서 사용 가능한 메서드이다. 이 부분에서 한가지 의문이 생길 것이다. array는 object기반의 자료형이니 그렇다 치고 string은 원시값인데 어떻게 메서드를 가지고 사용할까? 그 해답은 바로 object wrapper이다.
Object wrapper )
래퍼객체(object wrapper)는 js 수없이도 다루는 원시값에서 메서드의 사용을 가능하게 해주는 객체이다. 이 객체는 원시값을 남겨 단일 형태로 유지하고, 원시값의 메서드와 프로퍼티에 접근할 수 있도록 언어차원에서 허용한다.
래퍼 객체는 자료형마다 그 종류가 다양한데 바로 String, Number, Boolean, Symbol 등 이다. 그렇다 우리는 알게 모르게 래퍼 객체를 직접적, 간접적으로 사용해 오고 있었던 거다. 래퍼객체는 동작원리는 아래와 같다.
- 원시값의 프로퍼티, 메서드에 접근하면 각 자료형에 대응하는 래퍼객체가 생성된다.
- 래퍼 객체는 원시값을 알고 있고, 우리가 사용할 예정인 메서드를 가지고 있다.
- 메서드가 실행되고 새로운 문자열이 반환된다.
- 사용이 다한 즉시 래퍼객체는 파괴되고 원시값만 남는다.
정리
다시 의문점으로 돌아와서, 그래서 자바스크립트의 내장함수는 메서드인가? 답은 '아니다'이다. 내가 최초에 했던 오해는 'js에서 사용하는 내장함수들은 어떠한 객체에서 가져오는거고 이는 결국엔 메서드 아닌가'였고, 이는 점 표기법과 괄호로 감싸 사용하는 것의 차이를 잘인지하지 못하면서 깊어졌다. 하지만 오늘 되짚어본 결과 내장함수는 언어 자체에 포함되어있는 함수이며, 이는 데이터 타입마다 정의되어 사용 가능한 메서드와는 확연한 차이가 있다. 또한 점 표기법은 메소드의 사용을, 단순히 괄호로 감싸는 것은 내장함수의 사용을 의미한다.
반응형'문득 든 의문점' 카테고리의 다른 글
[ React ] props는 argument와 어떤 차이를 가질까? (0) 2023.03.28 [ CSS ] 가상 요소(::before, ::after)를 써서 얻을 수 있는 이득은 무엇일까? (0) 2023.03.10 [ JS ] JS의 Array와 자료 구조 관점에서 Array의 차이는? (0) 2023.01.05 [ 자료구조 ] linked list의 삽입/삭제는 정말 array list보다 빠른가? (1) 2023.01.05 [JS] cachingdecorator 에서 어떻게 Map으로 저장한 데이터가 유지될까? (0) 2022.12.15