[REAL Deep Dive into JS] 27. λ°°μ—΄

young_palleteΒ·2022λ…„ 10μ›” 1일
0

REAL JavaScript Deep Dive

λͺ©λ‘ 보기
28/46

🚦 본둠

λ°°μ—΄μ΄λž€

배열은 μ •~말 μ‚¬μš© λΉˆλ„κ°€ λ§Žμ€ μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.
순차적으둜 μ—¬λŸ¬ 개의 값을 각 μΈλ±μŠ€μ— ν• λ‹Ήν•˜μ—¬ μ†μ‰½κ²Œ μ ‘κ·Όν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

const example = [1,2,3,4,5]

μ΄λ•Œ, 배열이 가진 값듀을 μš”μ†ŒλΌκ³  λΆ€λ¦…λ‹ˆλ‹€.
그리고 이 μš”μ†Œμ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ μœ„μΉ˜λ₯Ό μš°λ¦¬λŠ” 인덱슀라고 λΆ€λ₯΄μ£ .

μš°λ¦¬λŠ” μ΄λŸ¬ν•œ 인덱슀λ₯Ό λ°”νƒ•μœΌλ‘œ κ°’μ˜ μˆœμ„œλ₯Ό 맀길 수 있으며, 순회 μ—­μ‹œ κ°€λŠ₯ν•©λ‹ˆλ‹€.
λ‚˜μ•„κ°€ length ν”„λ‘œνΌν‹°λ₯Ό 톡해 길이λ₯Ό μ•Œ 수 μžˆκΈ°λ„ ν•˜μ£ .

μžλ°”μŠ€ν¬λ¦½νŠΈ 배열은 배열이 μ•„λ‹ˆλ‹€

μ°Έ μž¬λ―ΈμžˆλŠ” νŒŒνŠΈμž…λ‹ˆλ‹€.
가끔, νŒŒμ΄μ¬μ„ ν•΄λ³Έ λΆ„λ“€μ΄μ‹œλΌλ©΄ μ΄λŸ¬ν•œ λ‹Ήν™©μŠ€λŸ¬μ›€μ„ 많이 μ ‘ν•˜μ…¨μ„ 것 κ°™μ•„μš”.

const a = [1,2,3,4,5]
a[-1] = 10
console.log(a) // [1, 2, 3, 4, 5, -1: 10]

μ‰½κ²Œ λ§ν•˜μžλ©΄, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열은 κ°μ²΄μž…λ‹ˆλ‹€.

κ°μ²΄λΌλŠ” 것은 무슨 의미λ₯Ό κ°€μ§ˆκΉŒμš”? 마치 인덱슀λ₯Ό ν‚€λ‘œ, μš”μ†Œλ₯Ό κ°’μœΌλ‘œ κ°–κΈ° λ•Œλ¬Έμ—, μ‹€μ œλ‘œλŠ” λ©”λͺ¨λ¦¬μ— 순차적으둜 값을 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. 이λ₯Ό ν¬μ†Œ 배열이라고 ν•˜λŠ”λ°μš”!

ν¬μ†Œλ°°μ—΄μ€ μ•„λ¬΄λž˜λ„ 값듀이 순차적으둜 μ €μž₯λ˜λŠ” 것이 μ•„λ‹ˆλ‹€ λ³΄λ‹ˆ, 순수 인덱슀λ₯Ό ν†΅ν•œ μ ‘κ·ΌμœΌλ‘œλŠ” λŠλ¦½λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜, 순차적으둜 값을 μ €μž₯ν•˜λŠ” 밀집 λ°°μ—΄κ³Ό 달리, νŠΉμ • μš”μ†Œ κ²€μƒ‰μ΄λ‚˜ μˆ˜μ •/μ‚­μ œμ— μžˆμ–΄μ„œλŠ” 값듀이 λ³€κ²½λ˜μ–΄λ„ λ’€μ˜ μš”μ†Œλ“€μ„ λ‹€μ‹œ μ΄λ™μ‹œν‚¬ ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ„±λŠ₯이 λΉ λ¦…λ‹ˆλ‹€.

그렇기에 μ‹€μ œλ‘œλŠ” 인덱슀둜 μ ‘κ·Όν•  λ•Œμ—λŠ” λ‹€λ₯Έ 언어보닀 느릴 μˆ˜λ°–μ— μ—†λ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄μ„œ, μ‹€μ œλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진듀은 배열을 μ΅œμ ν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸŽ‰ 결과적으둜 일반 객체 λŒ€λΉ„ μ•½ 2배만큼의 μ„±λŠ₯이 κ°œμ„ λ˜μ—ˆλ‹€κ³  ν•˜λ„€μš”!

length ν”„λ‘œνΌν‹°μ™€ ν¬μ†Œ λ°°μ—΄

ν¬μ†Œλ°°μ—΄μ€ 순차적으둜 값을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ, 이둜 μΈν•œ 재미 μžˆλŠ” 일듀이 많이 λ²Œμ–΄μ§ˆ 수 μžˆλŠ”λ°μš”.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열은 length ν”„λ‘œνΌν‹°λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.
μ΄λ•Œ, 이 lengthλ₯Ό λ™μ μœΌλ‘œ λ³€κ²½ν•˜κ±°λ‚˜, ν˜Ήμ€ ν˜„μž¬ μ΅œλŒ€ μΈλ±μŠ€λ³΄λ‹€ 더 큰 μΈλ±μŠ€μ— 값을 μΆ”κ°€ν•˜λ©΄ 마치 λ™μ μœΌλ‘œ λ°°μ—΄μ˜ 크기가 λŠ˜μ–΄λ‚œ κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

const arr = [1]
arr[5] = 5
console.log(arr) // [1, empty Γ— 4, 5]

μ—¬κΈ°μ„œ emptyλΌλŠ” 건 λ”°λ‘œ λ©”λͺ¨λ¦¬μ— 값을 μ €μž₯ν•˜μ§€ μ•Šμ„ λ•Œ μ•Œλ €μ£ΌκΈ° μœ„ν•œ μž₯μΉ˜μž…λ‹ˆλ‹€.
μ‹€μ œλ‘œλŠ” λ°°μ—΄μ˜ 길이가 λŠ˜μ–΄λ‚˜μ§€λ„ μ•ŠμœΌλ©°, λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜μ§€λ„ μ•ŠμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν¬μ†Œλ°°μ—΄μ΄λ©°, ν¬μ†Œλ°°μ—΄μ˜ lengthλŠ” 항상 λ°°μ—΄μ˜ 길이와 μΌμΉ˜ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. (length >= μ‹€μ œ λ°°μ—΄μ˜ 길이)

λ‹€λ§Œ μ΄λŸ¬ν•œ 방식이 ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 였히렀 μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ μ΅œμ ν™”λ₯Ό λ°©ν•΄ν•˜λŠ” μš”μ†Œμ΄κΈ° λ•Œλ¬Έμ΄μ£ .
λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진듀은 기본적으둜 νƒ€μž…μ΄ κ°™κ³  μš”μ†Œκ°€ μΌμΉ˜ν•˜λŠ” 배열을 생성할 λ•Œ κ°€μž₯ μ΅œμ ν™”κ°€ 잘 λœλ‹€κ³  ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ ν¬μ†Œλ°°μ—΄λ‘œ μƒμ„±ν•˜μ—¬ κ΄€λ¦¬ν•˜κΈ°λ³΄λ‹€λŠ”, 가급적 같은 νƒ€μž…μ˜ μš”μ†Œλ₯Ό μ—°μ†μ μœΌλ‘œ μœ„μΉ˜μ‹œν‚€λŠ” 것이 λ°”λžŒμ§ν•˜κ² κ΅°μš”!

πŸŽ‰ 마치며

사싀 λ‚˜λ¨Έμ§€λŠ” λ„ˆλ¬΄λ‚˜ λ‹Ήμ—°ν•œ μ–˜κΈ°λΌ, μƒλž΅ν•©λ‹ˆλ‹€.
λ˜ν•œ, λ©”μ„œλ“œμ˜ κ²½μš°μ—λŠ” ν•„μš”μ— λ”°λΌμ„œ μ“°λ©΄ λ©λ‹ˆλ‹€.
ꡳ이 이것을 ν•˜λ‚˜ν•˜λ‚˜ μ™Έμš΄λ‹€λŠ” 것은, μ˜μ–΄ μž˜ν•˜κ² λ‹€κ³  μ˜μ–΄μ‚¬μ „μ˜ 단어λ₯Ό λ‹€ μ™Έμš°κ² λ‹€λŠ” λ°œμƒμ— λΆˆκ³Όν•©λ‹ˆλ‹€.

μ€‘μš”ν•œ 것은, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열은 객체이며, 이 κ°μ²΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄λΆ€μ—μ„œ μ΅œμ ν™”κ°€ λ˜μ–΄ μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

그리고 이 μ΅œμ ν™”μ˜ 기쀀은 같은 νƒ€μž…μ˜ 값이 μ—°μ†μ μœΌλ‘œ λ“€μ–΄ μžˆμ„ 수둝 λΉ λ₯΄λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
λ”°λΌμ„œ ν¬μ†Œλ°°μ—΄μ„ μ§€μ–‘ν•˜λ©°, μ•ˆμ •μ μΈ μžλ°”μŠ€ν¬λ¦½νŠΈ 배열을 κ΄€λ¦¬ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€λŠ” 것이 이번 파트의 μš”μ§€λΌκ³  ν•  수 μžˆκ² μ–΄μš”!

그럼, λ‹€λ“€ 즐거운 κ³΅λΆ€ν•˜μ‹œκΈΈ 바라며, 이상! 🌈

profile
People are scared of falling to the bottom but born from there. What they've lost is nth. πŸ˜‰

0개의 λŒ“κΈ€