[스터디] 빌트인 객체

김하은·2024년 3월 14일
0

스터디

목록 보기
17/23

자바스크립트 객체의 분류

표준 빌트인 객체(네이티브 객체)

  • ECMAScript 명세에 정의된 객체
  • 애플리케이션 전역의 공통 기능을 제공
  • 애플리케이션의 환경과 관계없이 언제나 사용할 수 있음
  • Object, String, Number, Function, Array, RegExp, Date, Math와 같은 객체 생성에 관계가 있는 함수 객체와 메소드로 구성됨
  • 전역 객체의 프로퍼티로서 제공되므로 별도의 선언 없이 전역 변수처럼 언제나 참조할 수 잇음
  • 네이티브 객체를 Global Objects라고 부르기도 하는데 이것은 전역 객체(Global Object)와 다른 의미로 사용되므로 혼동에 주의하여야 함
    • 전역 객체(Global Object)는 모든 객체의 최상위 객체를 의미하며 일반적으로 Browser-side에서는 window, Server-side(Node.js)에서는 global 객체를 의미함

호스트 객체

  • ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경 (브라우저 환경 또는 Node.js 환경)에서 추가로 제공하는 객체를 말함
  • 따라서 브라우저에서 동작하는 환경과 브라우저 외부에서 동작하는 환경의 자바스크립트(Node.js)는 다른 호스트 객체를 사용할 수 있음
  • 브라우저에서 동작하는 환경의 호스트 객체는 전역 객체인 window, BOM(Browser Object Model)과 DOM(Document Object Model) 및 XMLHttpRequest 객체 등을 제공함

사용자 정의 객체

  • 표준 빌트인 객체와 호스트 객체처럼 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체를 말함

표준 빌트인 객체

  • 자바스크립트는 약 40여 개의 표준 빌트인 객체를 제공함
  • Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체임
  • 생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공하고 생성자 함수 객체가 아닌 표준 빌트인 객체는 정적 메서드만 제공함
  • 생성자 함수인 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체임
// String 생성자 함수에 의한 Srting 객체 생성
const strObj = new String(`Lee`); // string {"Lee"}

// String 생성자 함수를 통해 생성한 strObj 객체의 프로토타입은 String.prototype이다.
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true
  • 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체는 다양한 기능의 빌트인 프로토타입 메서드를 제공함
  • 표준 빌트인 객체는 인스턴스 없이도 호출 가능한 빌트인 정적 메서드를 제공함
//Number 생성자 함수에 의한 Number 객체 생성
const numObj = new Number(1.5); // Number {1.5}

//toFixed는 Number.prototype의 프로토타입 메서드다.
console.log(numObj.toFixed()); // 2

// isInteager는 Number의 정적 메서드다.
console.log(Number.isInteager(0.5)); // false

원시값과 래퍼 객체

문자열, 숫자, 불리언 등의 원시값이 있는데도 String, Number, Boolean 등의 표준 빌트인 생성자 함수가 존재하는 이유는?

  • 원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데도 원시값인 문자열이 마치 객체처럼 동작함
const str = 'hello';

//원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작함
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
  • 이는 원시값인 문자열, 숫자, 불리언 값의 경우 이들 원시값에 대해 마치 객체처럼 마침표 표기법(또는 대괄호 표기법)으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 변환해 주기 때문임
  • 원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌림
  • 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라고 함
const str = 'hi';

// 원시 타입인 문자열이 래퍼 객체인 String 인스턴스로 변환됨
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI

// 래퍼 객체로 프로퍼티에 접근하거나 메서드를 호출한 후, 다시 원시값으로 되돌림
console.log(typeof str); // string
  • 이때 문자열 래퍼 객체인 String 생성자 함수의 인스턴스는 String.prototype의 메서드를 상속받아 사용할 수 있음
  • 그 후 래퍼 객체의 처리가 종료되면 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된 원시값으로 원래의 상태, 즉 식별자가 원시값을 갖도록 되돌리고 래퍼 객체는 가비지 컬렉션의 대상이 됨

전역 객체(global object)

전역 객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않은 최상위 객체다.

  • 전역 객체는 자바스크립트 환경에 따라 지칭하는 이름이 제가각임

    • 브라우저 환경: window(또는 self, this, frames)
    • Node.js 환경: global
  • 전역 객체의 프로퍼티

    • 표준 빌트인 객체
    • 환경에 따른 호스트 객체(클라이언트 Web API 또는 Node.js의 호스트 API)
    • var 키워드로 선언한 전역 변수와 전역 함수
  • 전역 객체는 계층적 구조상 어떤 객체에도 속하지 않은 모든 빌트인 객체의 최상위 객체임

    • 이는 프로토타입 상송 관계상에서 최상위 객체라는 의미가 아님
    • 전역 객체 자신은 어떤 객체의 프로퍼티도 아니며 객체의 계층적 구조상 표준 빌트인 객체와 호스트 객체를 프로퍼티로 소유한다는 뜻임
  • 전역 객체의 특징

    • 개발자가 의도적으로 생성할 수 없음 즉, 전역 객체를 생성할 수 있는 생성자 함수가 제공되지 않음
    • 전역 객체의 프로퍼티를 참조할 때 window(또는 global)를 생략할 수 있음
    • 모든 표준 빌트인 객체를 프로퍼티로 가지고 있음
    • 자바스크립트 실행 환경에 따라 추가적으로 프로퍼티와 메서드를 갖음
    • var 키워드로 선언한 전역 변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 전역 함수는 전역 객체의 프로퍼티가 됨
    • let이나 const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아님
    • 브라우저 환경의 모든 자바스크립트 코드는 하나의 전역 객체 window를 공유함
profile
아이디어와 구현을 좋아합니다!

0개의 댓글