JavaScript - λ°°μ—΄(1)

JinsungΒ·2021λ…„ 8μ›” 26일
0

javascript

λͺ©λ‘ 보기
4/11
post-thumbnail

πŸ”Ž1. λ°°μ—΄ μ΄λž€

λ°°μ—΄ - 배열은 객체의 일쒅이며 μ—¬λŸ¬ 값듀이 μˆœμ„œλ₯Ό κ°–κ³  λ‚˜μ—΄λ˜μ–΄ μžˆλŠ” 집합. 즉 , μˆœμ„œκ°€ μžˆλŠ” μ»¬λ ‰μ…˜μ„ μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 자료ꡬ쑰 μž…λ‹ˆλ‹€.

βœ… 2. λ°°μ—΄ μ„ μ–Έ

λ°°μ—΄ 선언은 μ•„λž˜ 두가지 방식이 μžˆμŠ΅λ‹ˆλ‹€.

let arr = new Array();
let arr = [];

lengthλ₯Ό μ‚¬μš©ν•˜λ©΄ 배열에 λ‹΄κΈ΄ μš”μ†Œκ°€ λͺ‡κ°œμΈμ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

let animals = ['μ‚¬μž','λ…μˆ˜λ¦¬','κ³°']
console.log(animals.length) // 3

λ°°μ—΄ μš”μ†Œμ˜ μžλ£Œν˜•μ—” μ œμ•½μ΄ μ—†μŠ΅λ‹ˆλ‹€.

let arr = ['사과', { name: '보라'}, true, function(), {alert('hello world')} ];
// index 1인 μš”μ†Œ(객체) 의 name ν”„λ‘œνΌν‹° 좜λ ₯
console.log( arr[1].name); //보라
// index 3인 μš”μ†Œ(ν•¨μˆ˜) μ‹€ν–‰
arr[3](); // 'hello world'

βœ… 3. λ°°μ—΄μ˜ λ©”μ„œλ“œ

λ°°μ—΄μ˜ μš”μ†Œ μΆ”κ°€ 및 제거 λ©”μ„œλ“œ
push, pop, unshift, shift

  1. push - 맨 끝에 μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
let array = [1,2,3];
array.push(4);
console.log(array) // [1,2,3,4]
// 데큐처럼 μ‚¬μš©κ°€λŠ₯
let numArray = [4,5];
array.push(...numArray);
  1. pop - λ°°μ—΄ 끝 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³ , μ œκ±°ν•œ μš”μ†Œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
let array = [1,2,3]
array.pop();
console.log(array) // [1,2]
  1. unshift - λ°°μ—΄ μ•ž μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
let array = [1,2,3]
array.unshift(4);
console.log(array) // [4,1,2,3]
// 데큐처럼 μ‚¬μš©κ°€λŠ₯
let numArray = [4,5];
array.unshift(...numArray);
  1. shift - λ°°μ—΄ μ•ž μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³ , μš”μ†Œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
let array= [1,2,3]
array.shift();
console.log(array) // [2,3]

βœ… 4. λ°°μ—΄μ˜ λ‚΄λΆ€ λ™μž‘ 원리

배열은 객체의 μ’…λ₯˜μ€‘ ν•˜λ‚˜μž…λ‹ˆλ‹€. λ°°μ—΄ arr의 μš”μ†Œλ₯Ό arr[0]처럼 μ ‘κ·Όν•˜λŠ” 방식은 객체 λ¬Έλ²•μ—μ„œ μ™”μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ 배열은 Keyκ°€ μˆ«μžλΌλŠ” 점이 λ‹€λ¦…λ‹ˆλ‹€.

  1. 배열은 객체와 λ§ˆμ°¬κ°€μ§€λ‘œ μ°Έμ‘°λ₯Ό 톡해 λ³΅μ‚¬λ©λ‹ˆλ‹€.
let animals = ['ν˜Έλž‘μ΄']
let arr = animals; // μ°Έμ‘°λ₯Ό 볡사(두 λ³€μˆ˜κ°€ 같은 객체λ₯Ό μ°Έμ‘°)
console.log(animals === arr) // true
arr.push('λ…μˆ˜λ¦¬') // μ°Έμ‘°λ₯Ό μ΄μš©ν•΄ 배열을 μˆ˜μ •
console.log(animals); // 'ν˜Έλž‘μ΄','λ…μˆ˜λ¦¬'  - μš”μ†Œκ°€ 두 κ°œκ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  1. λ°°μ—΄ κ΄€λ ¨ μ—°μ‚° μ΅œμ ν™”(feat. javascript엔진)
let fruits = [];  //  빈 λ°°μ—΄ 생성
fruits[99999] = 5; // λ°°μ—΄μ˜ 길이보닀 훨 씬 큰 숫자λ₯Ό μ΄μš©ν•΄ ν”„λ‘œνΌν‹° 생성
fruits.age = 25; // μž„μ˜μ˜ 이름을 μ‚¬μš©ν•΄ ν”„λ‘œνΌν‹° 생성
  • 배열은 κ°μ²΄μ΄λ―€λ‘œ μœ„μ˜ˆμ‹œμ²˜λŸΌ ν”„λ‘œνΌν‹°λ₯Ό 좔가해도 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ ν•˜μ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 배열을 일반 객체러럼 λ‹€λ£¨κ²Œ 되면 배열을 λ‹€μΆœ λ•Œλ§Œ μ μš©λ˜λŠ” μ΅œμ ν™” 기법이 λ™μž‘ν•˜μ§€ μ•Šμ•„ λ°°μ—΄ 특유의 이점이 μ‚¬λΌμ§‘λ‹ˆλ‹€.
  • 잘λͺ»λœ μ˜ˆμ‹œ
    • arr.test =5 // 같이 μˆ«μžκ°€ μ•„λ‹Œ 값을 ν”„λ‘œνΌν‹° ν‚€λ‘œ μ‚¬μš©ν•œ 경우
    • arr[0]κ³Ό arr[1000] 만 μΆ”κ°€ν•˜κ³  그사이에 μ•„λ¬΄λŸ° μš”μ†Œλ„ μ—†λŠ” 경우
    • arr[1000], arr[999] 같이 μš”μ†Œλ₯Ό μ—­μˆœμœΌλ‘œ μ±„μš°λŠ” 경우

βœ… 4. μ„±λŠ₯

  1. push와 pop은 λΉ λ₯΄μ§€λ§Œ shift와 unshiftλŠ” λŠλ¦½λ‹ˆλ‹€.

text

  • shift, unshift 연산은 3가지 λ™μž‘μ„ λͺ¨λ‘ μˆ˜ν–‰ν•΄μ•Ό μ΄λ€„μ§‘λ‹ˆλ‹€.
    γ…‡ μΈλ±μŠ€κ°€ 0인 μš”μ†Œλ₯Ό 제거
    γ…‡ λͺ¨λ“  μš”μ†Œλ₯Ό μ™Όμ‘±μœΌλ‘œ 이동 , μ΄λ•Œ μΈλ±μŠ€λŠ” 1은 0 , 2λŠ” 1둜 λ³€ν™˜
    γ…‡ lenght ν”„λ‘œνΌν‹° 값을 κ°±μ‹ 
  • 배열에 μš”μ†Œκ°€ 많으면 μš”μ†Œκ°€ μ΄λ™ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ κΈΈκ³  λ©”λͺ¨λ¦¬ κ΄€λ ¨ 연산도 λ§Žμ•„μ§‘λ‹ˆλ‹€.
  • push와 pop λ©”μ„œλ“œλ“€μ€ λ§ˆμ§€λ§‰ μš”μ†Œλ§Œ μ‘°μž‘ν•˜κΈ° λ•Œλ¬Έμ— length ν”„λ‘œνΌν‹° 값을 μ€„μ—¬μ£ΌκΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. (λ©”μ„œλ“œμ˜ μ‹€ν–‰ 속도가 λΉ λ₯Έ 이유)
  1. 반볡문 (for, for..of, for..in)
  • for문은 배열을 μˆœνšŒν•  λ•Œ μ“°λŠ” κ°€μž₯ 였래된 λ°©λ²•μž…λ‹ˆλ‹€. μˆœνšŒμ‹œ indexλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
let arr = [1,2,3,4]
for(let i=0; i<arr.length;i++){
  console.log(arr[i]);
}
  • for..ofλ₯Ό μ‚¬μš©ν•˜μ—¬ 배열을 μˆœνšŒκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    for..ofλ₯Ό μ‚¬μš©ν•˜λ©΄ ν˜„μž¬ μš”μ†Œμ˜ μΈλ±μŠ€λŠ” μ–»μ„μˆ˜ μ—†κ³  κ°’λ§Œ μ–»μ„μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
let arrs = [1,2,3,4]
for (let arr of arrs){
  console.log(arr);
}
  • for..inλ₯Ό μ‚¬μš©ν•œ λ°°μ—΄μˆœνšŒ
    배열은 κ°μ²΄ν˜•μ— μ†ν•˜λ―€λ‘œ for..in을 μ‚¬μš©ν•˜λŠ”κ²ƒμ€ κ°€λŠ₯ν•˜μ§€λ§Œ ν•˜μ§€λ§Œ for..in 반볡문 νŠΉμ§•μ€ λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό λŒ€μƒμœΌλ‘œ μˆœνšŒν•©λ‹ˆλ‹€. Keyκ°€ μˆ«μžκ°€ μ•„λ‹Œ ν”„λ‘œνΌν‹°λ„ 순회 λŒ€μƒμ— ν¬ν•¨λ©λ‹ˆλ‹€.
    for..in λ°˜λ³΅λ¬Έμ€ 배열이 μ•„λ‹ˆλΌ 객체와 ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ μ΅œμ ν™”λ˜μ–΄ μžˆμ–΄μ„œ λ°°μ—΄μ—μ„œλŠ” ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. for..in반볡문의 속도가 λŒ€μ²΄λ‘œ λΉ λ₯ΈνŽΈμ΄λΌ 병λͺ© μ§€μ μ—μ„œλ§Œ λ¬Έμ œκ°€ 되긴 ν•˜μ§€λ§Œ for..inλ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  땐 이런 차이λ₯Ό μ•Œκ³  μ μ ˆν•œ 곳에 μ‚¬μš©ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.(λ°°μ—΄μ—” λ˜λ„λ‘ μ‚¬μš© X)
    Tip. μœ μ‚¬λ°°μ—΄ 객체(arra-like)λŠ” λ°°μ—΄μ²˜λŸΌ lengthν”„λ‘œνΌν‹°λ„ 있고, μš”μ†Œλ§ˆλ‹€ μΈλ±μŠ€λ„ μžˆμŠ΅λ‹ˆλ‹€ λ°°μ—΄κ³Ό 차이점은 Keyκ°€ μˆ«μžν˜•μ΄ μ•„λ‹Œ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.μœ μ‚¬λ°°μ—΄ 객체와 for..in을 μ‚¬μš©ν•˜λ©΄ 이 λͺ¨λ“  것을 λŒ€μƒμœΌλ‘œ μˆœνšŒκ°€ μ΄λ€„μ§‘λ‹ˆλ‹€.

βœ… 5. length ν”„λ‘œνΌν‹°μ™€ 주의점

length ν”„λ‘œνΌν‹°λŠ” λ°°μ—΄ λ‚΄ μš”μ†Œμ˜ κ°œμˆ˜κ°€ μ•„λ‹ˆλΌ κ°€μž₯ 큰 μΈλ±μŠ€μ— 1을 λ”ν•œ κ°’μž…λ‹ˆλ‹€.

  • 배열에 μš”μ†Œκ°€ ν•˜λ‚˜ 있고, 이 μš”μ†Œμ˜ μΈλ±μŠ€κ°€ μ•„μ£Ό 큰 μ •μˆ˜λΌλ©΄ λ°°μ—΄μ˜ length ν”„λ‘œνΌν‹°λ„ μ•„μ£Ό μ»€μ§‘λ‹ˆλ‹€.
let fruits = [];
fruits[1234] = '사과';
console.log(fruits.length); //1235
  • 주의점 : μžλ™μ˜λ‘œ κ°±μ‹ λ˜λŠ” length ν”„λ‘œνΌν‹°λ₯Ό μˆ˜λ™μœΌλ‘œ μ‘°μž‘ν• κ²½μš° μ¦κ°€μ‹œν‚€λŠ”κ±΄ 아무 λ³€ν™”κ°€ μ—†μ§€λ§Œ κ°μ†Œ μ‹œν‚€λ©΄ 배열이 μž˜λ¦½λ‹ˆλ‹€.
let arr = [1,2,3,4,5]
arr.length =2; //μš”μ†Œ 2개만 남기고 μž˜λΌλ΄…λ‹ˆλ‹€.
console.log(arr); [1,2]
arr.length =5; // λ‹€μ‹œ μ›λž˜ length둜 λ˜λŒλ €λ³΄μ§€λ§Œ..
console.log(arr[3]) // undefined: 이미 μ‚­μ œλœ μš”μ†Œλ“€μ€ 볡ꡬ가 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

βœ… 6. new Array()

new Array() 문법을 μ‚¬μš©ν•΄λ„ 배열을 λ§Œλ“€ 수 μžˆμ§€λ§Œ λŒ€κ΄„ν˜Έ []λ₯Ό μ‚¬μš©ν•˜λ©΄ 더 짧은 λ¬Έλ²•μœΌλ‘œ 배열을 λ§Œλ“€ 수 있기 λ•Œλ¬Έμ— new Array()λ₯Ό 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŽΈμž…λ‹ˆλ‹€. (feat. κΉŒλ‹€λ‘œμš΄ κΈ°λŠ₯)

μˆ«μžν˜• 인수 ν•˜λ‚˜λ₯Ό λ„£μ–΄μ„œ new Arrayλ₯Ό ν˜ΈμΆœν•˜λ©΄ λ°°μ—΄μ˜ λ§Œλ“€μ–΄ μ§€λŠ”λ°, 이 λ°°μ—΄μ—” μš”μ†Œκ°€ μ—†λŠ” 반면 κΈΈμ΄λŠ” μΈμˆ˜μ™€ κ°™μ•„μ§‘λ‹ˆλ‹€.

let arr = new Array(2); 
console.log(arr[0]); // undefined, μš”μ†Œκ°€ ν•˜λ‚˜λ„ μ—†λŠ” λ°°μ—΄
console.log(arr.length) // κΈΈμ΄λŠ” 2

πŸ™ 마치며

배열에 λŒ€ν•΄μ„œλŠ” λ‹€λ₯Έμ–Έμ–΄λ“€μ„ 톡해 λ‹€λ€„λ΄€μ—ˆκΈ° λ•Œλ¬Έμ— μ‰½κ²Œμƒκ°ν•˜κ³  κ°„κ³Όν–ˆμ§€λ§Œ 생각보닀 μ„±λŠ₯적인 μΈ‘λ©΄μ—μ„œ λͺ°λžλ˜ 지식을 κ³΅λΆ€ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
또 lengthκ°€ λ°°μ—΄μ˜ 갯수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œνΌν‹°λ‘œ μ•Œκ³ μžˆμ—ˆλŠ”λ°... 좩격😨 μ—­μ‹œ ν•˜λ‚˜λ₯Ό 보더라도 μ œλŒ€λ‘œ λ΄μ•Όν•œλ‹€λŠ” 생각을 ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

자료좜처
https://ko.javascript.info/array - λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ νŠœν† λ¦¬μ–Ό Site

0개의 λŒ“κΈ€