본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

JavaScript 객체 생성 — new Date · String · Array 완전 정리

by 왕진 2026. 7. 3.
반응형

 

 

Web Development · JavaScript

JavaScript 객체 생성 —
new Date · String 완전 정리

new 키워드로 만드는 객체, 그리고 메소드와 속성의 진짜 차이
시작 오늘 분석할 코드

이번 코드는 자바스크립트에서 new 키워드로 객체를 직접 만들어보는 가장 기본적인 예제다. 이미 만들어져 있는 Date, String이라는 두 가지 내장 클래스를 이용해서 "현재 시각 객체"와 "문자열 객체"를 각각 만들고, 그 객체들이 가진 메소드와 속성을 꺼내 쓰는 흐름을 담고 있다.

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>객체 생성 및 활용</title> </head> <body> <h3>객체 생성 및 활용</h3> <hr> <script> // Date 객체 생성 let today = new Date(); // new 키워드가 Date 함수(클래스)의 객체를 생성하고 // 그 결과를 today 변수에 저장한다. 이제부터 today는 "today 객체"라고 부른다. // Date 객체의 toLocaleString() 메소드 호출 document.write("현재 시간 : " + today.toLocaleString() + "<br>"); // toLocaleString() 메소드가 동작한 결과를 write() 메소드로 브라우저에 출력한다. // String 객체 생성 let mystr = new String("자바스크립트 공부하기"); // String 클래스 괄호 안에 문자열을 넣으면 문자열 객체가 만들어지고 mystr 변수에 저장된다. document.write("mystr의 내용 : " + mystr + "<br>"); document.write("mystr의 길이 : " + mystr.length + "<br>"); // mystr 객체에 저장된 문자열의 길이를 자동으로 세어주는 length 속성이다. // mystr.length = 10; // 이 문장은 오류이다. // length는 자동으로 계산되는 값이라서, 직접 숫자를 넣어 저장하는 일반 속성과는 다르다. </script> </body> </html>
실제 출력 미리보기

객체 생성 및 활용


현재 시간 : 2026. 7. 4. 오후 3:32:10

mystr의 내용 : 자바스크립트 공부하기

mystr의 길이 : 11

toLocaleString()이 만들어내는 문자열은 브라우저를 실행하는 시점의 실제 시각이라서 매번 값이 다르다. 위 화면은 2026년 7월 4일 오후 3시 32분에 실행했다고 가정한 예시 출력이다.

용어 용어 정리
객체 (Object)여러 데이터와 기능을 하나로 묶어놓은 자바스크립트의 값 덩어리
new클래스(함수)를 바탕으로 새로운 객체를 "만들어내라"는 연산자
생성자 (Constructor)new와 함께 호출되어 객체를 초기화하는 함수 (Date, String 등)
인스턴스 (Instance)생성자로 실제로 만들어진 결과물 한 개 (today, mystr)
메소드 (Method)객체가 실행할 수 있는 동작. 괄호 () 를 붙여서 호출 (toLocaleString())
속성 (Property)객체가 가지고 있는 값. 괄호 없이 이름만으로 접근 (length)
toLocaleString()Date 객체를 지역(로케일) 형식의 읽기 좋은 문자열로 바꿔주는 메소드
length문자열 객체 안에 글자가 몇 개 들어있는지 자동으로 세어주는 속성

1 new 키워드가 실제로 하는 일
왜 그냥 함수 호출이 아니라 new를 붙이는가?

자바스크립트에는 Date, String처럼 "이걸로 객체를 찍어내라"는 용도로 미리 만들어진 함수들이 있다. 이런 함수를 생성자(Constructor)라고 부르고, 그 앞에 new를 붙이면 자바스크립트 엔진이 빈 객체를 하나 만든 다음 생성자 함수 안의 초기화 코드를 실행해서 그 객체를 채워준다. new 없이 Date()만 호출하면 객체가 아니라 그냥 현재 시각을 나타내는 문자열 한 줄이 돌아온다 — 완전히 다른 결과다.

new 생성자이름() = "이 설계도(생성자)대로 객체 하나를 새로 찍어내라"는 뜻. 괄호는 생성자에게 필요한 재료(인자)를 넘겨주는 자리다.
new가 실행될 때 내부적으로 벌어지는 일

겉으로는 한 줄이지만 new Date()가 실행되는 순간 내부적으로는 세 단계가 순서대로 일어난다. 이 흐름을 알면 왜 new 없이 호출했을 때 결과가 완전히 달라지는지 이해할 수 있다.

① 빈 객체 생성
② Date 생성자 코드 실행 (초기화)
③ 완성된 객체를 today에 반환

2 Date 객체와 toLocaleString()
시간은 왜 객체로 다루는가?

"현재 시각"은 연도·월·일·시·분·초가 한 덩어리로 묶여야 의미가 있는 값이다. 그래서 자바스크립트는 시간을 숫자 하나가 아니라 Date라는 객체로 표현한다. new Date()를 실행하는 순간 컴퓨터의 현재 시각이 통째로 담긴 객체가 만들어지고, 그 안에는 연·월·일을 꺼내는 메소드들이 잔뜩 들어있다. toLocaleString()은 그중에서도 그 값을 사람이 읽기 좋은 문자열(예: "2026. 7. 4. 오후 3:32:10")로 한 번에 바꿔주는 메소드다.

today = new Date() → today 안에 { 연도, 월, 일, 시, 분, 초, ... } 정보가 통째로 저장됨 today.toLocaleString() → 그 정보를 브라우저의 언어 설정에 맞춰 읽기 좋은 문자열로 변환

3 변수는 객체를 "가리킨다"
today는 왜 today객체라고 부르는가?

원본 코드의 주석처럼 let today = new Date();가 실행되면 "today"라는 이름표가 새로 만들어진 객체에 붙는다고 이해하면 쉽다. 정확히는 today라는 변수 안에 객체 그 자체가 아니라 그 객체가 있는 위치(참조)가 저장되지만, 초보 단계에서는 "이제부터 today는 그 객체를 가리키는 이름이다" 정도로 이해해도 충분하다. 그래서 이후 코드에서 today.toLocaleString()처럼 변수 이름 뒤에 점(.)을 찍어서 그 객체의 메소드나 속성에 바로 접근할 수 있는 것이다.

※ 변수 이름 뒤의 점(.)은 "그 변수가 가리키는 객체 안으로 들어가서"라는 뜻으로 읽으면 된다. today.toLocaleString() = "today 객체 안의 toLocaleString을 실행해라."

 

반응형

 

4 브라우저가 이 코드를 실행하는 순서
위에서 아래로, 한 줄씩 차례대로

자바스크립트는 <script> 태그 안의 코드를 원칙적으로 위에서 아래로 한 줄씩 순서대로 실행한다. 이번 코드가 브라우저 안에서 어떤 순서로 처리되는지 단계별로 정리하면 다음과 같다.

1
let today = new Date();현재 시각이 담긴 Date 객체를 만들어 today에 저장
2
today.toLocaleString() 호출today 안의 시각 정보를 사람이 읽기 좋은 문자열로 변환
3
document.write(...)"현재 시간 : ..." 한 줄을 화면에 그려 넣음
4
let mystr = new String("...");문자열을 담은 String 객체를 만들어 mystr에 저장
5
document.write(... mystr ...)mystr의 내용을 그대로 화면에 출력
6
document.write(... mystr.length ...)mystr 안 문자열의 글자 수를 계산해 출력
※ 두 let 선언은 완전히 독립적이다. today를 만드는 코드가 mystr에 아무 영향을 주지 않는다 — 각 객체는 자신만의 데이터를 가진 별개의 덩어리이기 때문이다.

5 String 객체 생성 — 문자열도 객체가 될 수 있다
"자바스크립트 공부하기"는 원래 문자열 아닌가?

맞다. 하지만 자바스크립트의 문자열은 평소에는 원시값(primitive)이라는 가벼운 형태로 존재한다. 그런데 new String("자바스크립트 공부하기")처럼 new를 붙여서 만들면, 같은 글자 내용을 담고 있지만 훨씬 더 무거운 객체 형태의 문자열이 만들어진다. 겉보기 출력은 똑같아 보여도 내부적으로는 "그냥 텍스트 값"과 "메소드·속성을 가진 객체"라는 차이가 있다. 이 코드에서는 일부러 객체로 만들어서 그 객체가 가진 length 속성을 꺼내 쓰는 방법을 연습하고 있다.

원시 문자열
let mystr = "자바스크립트 공부하기";
→ 가볍고 빠른 텍스트 값 그 자체
String 객체
let mystr = new String("자바스크립트 공부하기");
→ 메소드·속성을 가진 객체 껍데기 안에 텍스트가 들어있음

6 length 속성 — 자동으로 세어지는 값
length는 누가 계산해주는가?

mystr.length는 mystr 안에 들어있는 문자열의 글자 수를 알려준다. "자바스크립트 공부하기"는 자·바·스·크·립·트·(공백)·공·부·하·기, 이렇게 11글자이므로 mystr.length는 11이 출력된다. 중요한 건 이 숫자를 개발자가 직접 세서 입력한 게 아니라는 점이다. 문자열 객체가 만들어지는 순간 자바스크립트 엔진이 내부적으로 글자 수를 세어서 length라는 이름의 값으로 자동으로 채워 넣는다.

"자바스크립트 공부하기" 자 바 스 크 립 트 (공백) 공 부 하 기 1 2 3 4 5 6 7 8 9 10 11 → mystr.length === 11

7 length에 값을 대입하면 왜 오류가 나는가
읽기 전용 속성 vs 일반 속성

원본 코드의 마지막 줄 mystr.length = 10;이 주석 처리되어 있는 이유가 바로 여기 있다. 우리가 평소에 쓰는 대부분의 속성은 mystr.color = "red"처럼 원하는 값을 자유롭게 넣고 바꿀 수 있는 일반 속성이다. 하지만 length는 사람이 값을 넣는 속성이 아니라, "지금 문자열이 몇 글자인가"를 실시간으로 계산해서 보여주기만 하는 읽기 전용(read-only) 속성이다. 그래서 mystr.length = 10;처럼 억지로 값을 넣으려고 하면 그 대입은 무시되거나(비엄격 모드), strict 모드에서는 TypeError로 막힌다 — 어느 쪽이든 실제 글자 수가 10으로 바뀌는 일은 없다.

※ length는 "결과를 보여주는 계기판 눈금"과 같다. 눈금 숫자를 손으로 돌려도 실제 온도가 바뀌지 않는 것처럼, length에 값을 넣어도 실제 글자 수는 바뀌지 않는다.

8 메소드 vs 속성 — 헷갈리지 않는 구분법
괄호가 있느냐 없느냐가 핵심

이번 코드에는 메소드(toLocaleString(), write())와 속성(length)이 함께 나온다. 겉모습으로 구분하는 가장 쉬운 방법은 괄호 () 의 유무다. 메소드는 "어떤 동작을 실행해달라"는 요청이라서 반드시 괄호를 붙여 호출하고, 속성은 이미 객체 안에 저장돼 있는 값이라서 이름만 쓰면 바로 그 값이 나온다.

구분 예시 의미
메소드 today.toLocaleString() 동작을 실행하라는 요청 (괄호 필수)
메소드 document.write() 화면에 출력하라는 요청 (괄호 필수)
속성 mystr.length 이미 저장된 값을 꺼내옴 (괄호 없음)
※ 구분 팁
  • 괄호 () 가 붙어있다 → 메소드, "실행"하는 것
  • 괄호 없이 이름만 있다 → 속성, "값"을 읽는 것
  • 둘 다 객체이름.이름 형태로 접근하는 건 동일하다

9 자주 하는 실수
실수 증상 해결
new 없이 String() 호출 객체가 아니라 원시 문자열이 만들어져 의도와 다르게 동작 객체가 필요할 때만 명확히 new String(...) 사용
mystr.length = 10;처럼 속성에 강제 대입 값이 반영되지 않거나 strict 모드에서 오류 발생 length는 읽기 전용 — 문자열 자체를 새로 만들어서 바꾸기
메소드를 속성처럼 괄호 없이 사용 (today.toLocaleString) 값이 아니라 함수 코드 자체가 출력됨 실행이 필요한 메소드는 반드시 () 붙이기
document.write()를 페이지 로드 후에 호출 기존 페이지 내용이 통째로 지워짐 학습용 예제 외에는 innerText/innerHTML 등으로 대체
toLocaleString() 결과가 매번 같을 거라고 착각 실행할 때마다 다른 시각이 출력돼 헷갈림 실행 시점의 실제 현재 시각이 반영된다는 점을 이해하기

핵심 한 줄 요약

new 생성자()생성자(설계도)를 바탕으로 새 객체를 만들어내는 문법
new Date()현재 시각 정보를 통째로 담은 객체 생성
toLocaleString()Date 객체를 사람이 읽기 좋은 문자열로 변환하는 메소드
변수 = 객체변수는 만들어진 객체를 가리키는 이름표 역할
new String()원시 문자열이 아닌 메소드·속성을 가진 문자열 객체 생성
length글자 수를 자동으로 세어 보여주는 읽기 전용 속성
메소드 vs 속성괄호 () 가 있으면 메소드(실행), 없으면 속성(값)

Tags

#JavaScript #객체 #객체생성 #new키워드 #Date객체 #String객체 #toLocaleString #length속성 #메소드 #속성 #생성자 #자바스크립트기초 #JS #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
JavaScript, 객체, 객체생성, new키워드, Date객체, String객체, toLocaleString, length속성, 메소드, 속성, 생성자, 자바스크립트기초, JS, 웹개발, 티스토리
반응형

댓글