JavaScript 배열 —
[] 리터럴과 인덱스 완전 정리
배열은 "여러 개의 값을 한 상자에 순서대로 담는 것"이다. 이번 코드는 []로 배열을 만들고, for문으로 배열을 처음부터 끝까지 돌면서 각 값만큼 *(별)을 찍어 막대그래프처럼 보여준다. 배열·인덱스·이중 반복문이 한 번에 들어간 자바스크립트 기초 필수 코드다.
[]로 배열 만들기
document.write로 배열 선언 자체를 텍스트로 찍은 것이고, 그 아래 5줄은 for문이 배열을 한 바퀴 돌며 각 원소 값만큼 별을 찍은 결과다. 값이 클수록(20) 별이 길고, 작을수록(5) 별이 짧다 — 숫자 데이터를 시각화하는 가장 원초적인 방법이다.만약 배열이 없다면 let a = 20; let b = 5; let c = 8; ... 처럼 값마다 변수를 따로 만들어야 한다. 값이 5개면 그럭저럭 되지만 100개, 1000개가 되면 관리가 불가능하다. 배열은 "같은 종류의 여러 값"을 하나의 이름(plots) 아래 순서대로 묶어서, 반복문으로 한 번에 다룰 수 있게 해준다.
new Array() 같은 생성자를 거치지 않고, [] 기호로 직접 값을 써서 즉석에서 만드는 표기법을 말한다. 자바스크립트에서는 거의 항상 이 [] 리터럴 방식을 쓴다.사람은 "첫 번째, 두 번째, 세 번째"로 1부터 세지만, 배열의 인덱스는 0부터 시작한다. plots = [20, 5, 8, 15, 20]이면 각 값의 위치는 다음과 같다.
| 인덱스 | 값 | 사람이 부르는 순서 |
|---|---|---|
plots[0] |
20 | 첫 번째 |
plots[1] |
5 | 두 번째 |
plots[2] |
8 | 세 번째 |
plots[3] |
15 | 네 번째 |
plots[4] |
20 | 다섯 번째(마지막) |
plots[5]에 접근하면 값이 없어 undefined가 나온다.plots[0], plots[1]처럼 숫자를 직접 써도 되지만, 그러면 5줄을 따로 써야 한다. plots[i]처럼 대괄호 안에 변수 i를 넣으면, i의 값이 0, 1, 2, 3, 4로 바뀔 때마다 plots[i]가 자동으로 다른 원소를 가리킨다. 이것이 배열과 반복문이 항상 짝을 이루는 이유다.
코드에서는 let size = plots[i];로 그때그때의 원소 값을 size라는 임시 변수에 옮겨 담는다. 왜 굳이 옮기냐면, 아래 while문에서 size를 계속 줄여야 하는데, plots[i] 자체를 줄이면 원본 배열 데이터가 훼손되기 때문이다.
size는plots[i]값의 "복사본"이다size--를 아무리 반복해도plots배열 자체는 그대로다- 그래서 반복문 마지막에
plots[i]를 다시 출력해도 원래 값(20, 5, 8...)이 정확히 나온다
for(초기식; 조건식; 증감식) 구조에서 각 부분은 역할이 분명하다.
주석에도 있듯 5 대신 plots.length를 써도 결과는 똑같다. plots.length는 배열이 가진 원소 개수(여기선 5)를 자동으로 계산해주는 속성이기 때문이다.
i < 배열명.length로 쓴다. 지금은 학습 목적으로 5를 그대로 둬도 이해에 지장은 없다.바깥쪽 for문은 "배열의 몇 번째 원소를 볼 것인가"(총 5바퀴, 정해진 횟수)를 담당하고, 안쪽 while문은 "그 원소 값만큼 별을 몇 개 찍을 것인가"(값에 따라 매번 다른 횟수)를 담당한다. 반복 횟수가 미리 정해지지 않고 조건(size > 0)이 언제 거짓이 될지에 달려 있을 때 for보다 while이 더 자연스럽다.
size--는 매 반복마다 size를 1씩 줄인다. 이 줄어드는 값이 없다면 size > 0은 영원히 참이 되어 무한루프에 빠진다. while문에서 조건에 쓰이는 변수를 반복 안에서 반드시 변화시켜야 하는 이유가 여기 있다.
size--를 빼먹으면 브라우저가 멈출 정도로 *이 무한히 출력된다. while을 쓸 때는 "이 조건이 언젠가 거짓이 되는가?"를 항상 확인해야 한다.document.write()는 괄호 안 문자열을 HTML 문서에 그대로 이어 붙이는 함수다. 자바스크립트 코드에서 줄을 바꿔 써도(예: 여러 줄에 걸쳐 document.write를 호출해도) 그것이 HTML 화면의 줄바꿈으로 이어지지는 않는다. HTML은 개행 문자를 무시하기 때문에, 화면에서 줄을 바꾸려면 HTML 태그인 <br>을 문자열 안에 직접 포함시켜야 한다.
plots[i] + "<br>"에서plots[i]는 숫자(예: 20)- 자바스크립트는 숫자 + 문자열을 만나면 숫자를 자동으로 문자열로 바꿔 이어붙인다(문자열 연결)
- 결과:
"20" + "<br>"→"20<br>"
| 실수 | 증상 | 해결 |
|---|---|---|
| 배열 개수와 마지막 인덱스를 혼동 | 원소 5개인데 plots[5] 접근 → undefined |
마지막 인덱스는 항상 length - 1임을 기억 |
while문 안에서 size-- 누락 |
조건이 계속 참 → 무한루프, 브라우저 멈춤 | while 조건에 쓰는 변수는 반복 안에서 반드시 변화시킬 것 |
plots[i] 자체를 직접 감소시킴 |
원본 배열 값이 바뀌어 이후 출력이 틀어짐 | size 같은 임시 변수에 복사해서 사용 |
문자열에 <br>을 빼먹음 |
모든 결과가 한 줄에 다 붙어서 출력 | document.write 문자열 끝에 "<br>" 포함 |
for 조건을 숫자로 하드코딩(i<5) |
배열 원소 수가 바뀌면 반복 횟수가 안 맞음 | i < plots.length로 배열 길이에 맞춰 자동화 |
| 배열 리터럴에 콤마 하나 빠뜨림 | 문법 오류 또는 원소 개수가 의도와 다르게 생성 | [값1, 값2, 값3] 각 값 사이 콤마 확인 |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| JavaScript 프로토타입 — 생성자 함수·this·메서드 완전 정리 (0) | 2026.07.04 |
|---|---|
| JavaScript Array 메서드 — concat·join·reverse·sort 완전 정리 (0) | 2026.07.04 |
| JavaScript 객체 생성 — new Date · String · Array 완전 정리 (0) | 2026.07.03 |
| JavaScript 전역 함수 — eval · parseInt · isNaN 완전 정리 (0) | 2026.07.03 |
| JavaScript 함수 — 선언·파라미터·return 완전 정리 (0) | 2026.07.03 |
왕진 블로그

댓글