Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 내장 생성자(Built-in Constructor) 완벽 정리

자바스크립트는 개발자가 별도로 정의하지 않아도 바로 사용할 수 있는 내장 생성자(built-in constructors)를 여러 가지 제공합니다. 대표적인 내장 생성자로는 Object(), String(), Number(), Boolean(), Array(), RegExp() 등이 있습니다.

Math는 왜 내장 생성자에 포함되지 않을까?

흥미로운 점은 Math 객체가 이러한 내장 생성자 목록에 포함되지 않는다는 것입니다. 그 이유는 Math가 일반적인 생성자 함수가 아니라 전역 객체(global object)이기 때문입니다. 따라서 Math에는 new 키워드를 사용할 수 없으며, 인스턴스를 생성하는 방식으로 활용할 수 없습니다. Math의 메서드와 속성(예: Math.random(), Math.PI)은 항상 Math 객체 자체를 통해 직접 접근해야 합니다.

내장 생성자 사용 예제

다음 예제에서는 다양한 내장 생성자를 사용하여 객체를 만들고, 각 변수의 타입을 typeof 연산자로 확인하여 출력합니다.

<html>
<body>
<script>
    var a = new Object();
    var b = new String();
    var c = new Number();
    var d = new Boolean();
    var e = new Array();
    var f = new RegExp();
    document.write(
      "a: " + typeof a + "</br>" +
      "b: " + typeof b + "</br>" +
      "c: " + typeof c + "</br>" +
      "d: " + typeof d + "</br>" +
      "e: " + typeof e + "</br>" +
      "f: " + typeof f + "</br>"
   );
</script>
</body>
</html>

실행 결과

a: object
b: object
c: object
d: object
e: object
f: object

결과 분석

출력 결과를 보면 알 수 있듯이, new 키워드로 생성된 모든 값의 타입은 "object"로 표시됩니다. 이는 자바스크립트에서 원시 타입(primitive type)이 아닌 참조 타입(reference type)은 모두 객체로 취급되기 때문입니다.

참고: 리터럴 표기법과의 차이

실무에서는 new String()과 같은 생성자 호출보다 문자열 리터럴("hello"), 숫자 리터럴(123), 배열 리터럴([])처럼 간결한 리터럴 표기법을 사용하는 것이 권장됩니다. 생성자로 만든 객체는 typeof 결과가 "object"로 나오지만, 리터럴로 만든 값은 "string", "number" 등 해당 원시 타입으로 나타나기 때문에 예상치 못한 동작을 방지할 수 있습니다.