ESTsoft/프론트엔드 오르미 1기

[EST] 240711 JavaScript-05

효땡 2024. 7. 23. 17:06

조건문

삼항연산자

- 간단한 if-else문을 한 줄로 표현할 수 있는 연산자

 

기본구조

(조건식) ? (조건식이 참일 때 실행할 코드) : (조건식이 거짓일 때 실행할 코드)
let item = true ? 'apple' : 'gold';

console.log(item); // apple

 

true ? console.log("true") : console.log("false"); // true
false ? console.log("true") : console.log("false"); // false

const result = false ? console.log("true") : console.log("false"); 
console.log(result); // undefined


let num = 10;
const item = num > 5 ? "apple" : "banana";

console.log(item); // apple

 

삼항연산자 중첩

//6000보다 크면 : '비싸요'
//3000보다 크면 : '적당해요'
//3000보다 크고 6000보다 작거나 같으면: '적당해요'
//3000보다 작거나 같으면: '저렴해요'

let price = 2000;
let message = price > 6000 ? "비싸요" : price > 3000 ? "적당해요" : " 저렴해요";

console.log(message); // 저렴해요

 

switch문

- 주어진 표현식의 값에 따라 분기 처리를 하는 조거문을 작성 가능

- 표현식과 여러 개의 case를 비교하여 일치하는 case의 실행코드가 실행됨

- 모든 case와 일치하지 않는 경우 default블록 안의 코드가 실행됨

 

기본구조

switch (표현식) {
  case 값1:
  //값1에 대한 실행코드
  case 값2:
  //값2에 대한 실행코드
  // ...
  default:
  // 모든 case에 일치하지 않는 경우 실행할 코드
}
let name = "뽀로로";

switch (name) {
  case "뽀로로":
    console.log("관리자입니다");
  case "펭수":
    console.log("매니저입니다");
  case "루피":
    console.log("사용자입니다");
  default:
    console.log("일치하지 않습니다");
}
// 관리자입니다

 

- fall through 현상: 값과 일치하는 case의 코드뿐만 아니라 그 이후의 코드가 모두 실행

- fall through 현상을 방지하기 위해 break문을 추가

const today = new Date();
// new Date().getDay() -> 요일 정보를 가져올 수 있음
// 0 일요일, 1 월요일, 2 화요일, ..., 6 토요일

console.log("오늘은: ", today.getDay());

switch (today.getDay()) {
  case 1:
    console.log("월요일");
    break;
  case 2:
    console.log("화요일");
    break;
  case 3:
    console.log("수요일");
    break;
  case 4:
    console.log("목요일");
    break;
  case 5:
    console.log("금요일");
    break;
  case 6:
    console.log("토요일");
    break;
  case 0:
    console.log("일요일");
    break;
  default:
    console.log("무슨 요일인지 모름");
}

반복문

- 동일한 작업을 여러 번 반복해야 할 때 사용

const weniv_friends = ["licat", "binky", "gary", "soulgom", "mura"];

let text = "<ul>\n";
text += "<li>" + weniv_friends[0] + "</li>\n";
text += "<li>" + weniv_friends[1] + "</li>\n";
text += "<li>" + weniv_friends[2] + "</li>\n";
text += "<li>" + weniv_friends[3] + "</li>\n";
text += "<li>" + weniv_friends[4] + "</li>\n";
text += "</ul>\n";

console.log(text);
//document.body.innerHTML = text;

 

* document.body.innerHTML

  HTML문서(document)의 body(.body) 요소 내부에 들어갈 HTML(.innerHTML) 내용을 수정하는 코드

for문

- 기본구조

for (초기화식; 조건식; 증감식) {
    //반복에서 실행할 코드
}
// 0부터 5까지 출력하는 코드를 생성
for (let i=0; i<=5; i++) {
  console.log(i);
}
// 0 1 2 3 4 5
let text2 = "<ul>";
for (let i = 0; i < weniv_friends.length; i++) {
  text2 += "<li>" + weniv_friends[i] + "</li>\n";
}
text2 += "</ul>";
console.log(text2);
document.body.innerHTML = text2;

 

반복문퀴즈

Q. 1부터 100까지 짝수의 합을 구하는 반복문 코드

 

첫 번째 방법

let total = 0;
for(i=0; i<=100; i=i+2){
  total += total + i;
}
console.log("짝수의 합: " + total); // 짝수의 합: 2550

 

두 번째 방법

let evenSum = 0;
for(let i=0; i<=100; i++) {
  if (i % 2 === 0) evenSum += 1;
}
console.log("짝수의 합: " + total); // 짝수의 합: 2550

 

Q. 반의 평균을 구하는 반복문 코드 (reduce 코드 사용 X)

const score = [84, 92, 39, 55, 71];

let total2 = 0;
for(let i=0; i<score.length; i++) {
  total2 = score[i];
}
console.log("반의 평균: " + total2 / score.length.toFixed(1) + "점"); //반의 평균: 68.2점

 

이중 반복문

- for문 안에 다른 for문을 중첩해서 이중 반복문 사용 가능

- 이중 반복문을 활용하여 2차원 배열을 다루거나, 두개의 변수를 사용하여 반복작업 수행가능

// 구구단
for(let i=2; i<=9; i++) {
  console.log(`\n---${i}단---`)
  for(let j=1; j<=9; j++) {
    console.log(`${i} * ${j} = ${i * j}`);
  }
}
/*
---2단---
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

---3단---
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

---4단---
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

---5단---
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

---6단---
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

---7단---
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

---8단---
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

---9단---
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
*/

 

for문의 선택적 사용

- for문의 구성요소(초기화식, 조건식, 증감식)은 모두 선택적으로 사용가능

- 세미콜론으로 구분되어 있는 항목을 빈 칸으로 두면 구성요소를 선택적으로 사용가능

- 초기화식을 생략하고 for문 밖의 변수 이용가능

 

- 기본구조

for (초기화식; 조건식; 증감식) {

}
let i = 0;
for (; i<5; ) {
  console.log(i);
  i++;
}
// 0 1 2 3 4


for (let i=0; i<5; i++) {
  console.log(i);
}
// 0 1 2 3 4

 

- 조건식 또한 선택적으로 사용가능하지만 생략할 경우 무조건 true로 평가되기 때문에 코드를 무한비 반복하게 됨

- 이럴 경우, 무한루프에 빠지지 않도록 별도의 조건문을 넣어야 함

- 모든 구성요소를 생략할 경우 무한루프에 빠짐

// 조건식을 생략 -> 반복문 안에 탈출조건을 생성
// 탈출조건이 없는 경우 -> 무한 반복에 빠짐
for (let i=0; ; i++) {
  console.log(i);
  
  if(i>10) break;
}

 

while문

- 주어진 조건식이 참일 때 반복적으로 실행되는 반복문

- Truthy 또는 Falsy를 반환하는 표현식

- 만약 조건식이 Truthy하면 중괄호 안의 코드가 실행되며, 조건식이 Falsy하면 반복이 종료

 

- 기본구조

while (조건식) {
  //조건식이 참일 때 실행될 코드
}
let num = 0;

while (num < 11) {
  console.log(num);
  num++;
}
// 0 1 2 3 4 5 6 7 8 9 10

 

이중 반복문

let i = 2;
while (i<=9) {
  console.log(`---${i}단---`)
  
  let j = 1;
  while (j<=9) {
    console.log(`${i} * ${j} = ${i * j}`);
    j++;
  }
  i++
}
/*
---2단---
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

---3단---
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

---4단---
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

---5단---
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

---6단---
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

---7단---
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

---8단---
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

---9단---
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
*/

 

do ~ while 반복문

- 조건식의 평가 전에 코드를 실행하는 반복문

- 조건식이 거짓이라도 최소한 한번의 실행이 보장

let num = 12;
do {
  console.log(num);
  num++;
} while (num < 11);
// 12 -> 최소 한 번의 실행을 보장
let inpNum;
let count = 0;

do {
  if (count >= 3) {
    break;
  }
  inpNum = window.prompt("숫자를 입력하세요");
  count++;
} while (inpNum === "" || isNaN(inpNum);

if (inpNum !== null) {
  console.log(`입력된 숫자는 ${inpNum}`);
}
console.log(`입력된 숫자는 ${inpNum}`);

 

break와 continue

- 반복문의 흐름 제어 가능

- 반복문에서 특정조건에 따라 반복문을 중단하거나 건너뛰는 역할을 함

 

break

- break문을 이용하면 반복문을 즉시 종료가능

for break

for (let i=0; i<=5; i++) {
  if(i===3) break;
  
  console.log(i); // 0 1 2
}

 

while break

let num = 0;
while (num < 11) {
  if (num === 5) break;
  
  console.log(num); // 0 1 2 3 4
  num++;
}

 

continue

- 반복문을 완전히 빠져나가는 break와 다르게 반복문의 다음 반복으로 이동시킴

- 특정 조건을 만족할 때, 해당 반복을 건너뛰고 다른 반복으로 넘어가는데 사용됨

// 1 ~ 50 중, 3의 배수를 제외한 합

let sum = 0;
for (let i=1; i<=50; i++) {
  if(i%3 === 0) continue;
  sum += i;
}
console.log(sum); // 867

 

for continue

for (let i=0; i<=5; i++) {
  if (i === 3) continue;
  
  console.log(i); // 0 1 2 4 5
}

 

while continue

let num = 0;

while (num < 11) {
  num++;
  if (num === 5) continue;
  console.log(num); // 1 2 3 4 6 7 8 9 10 11
}

 

do while continue

let num = 0;

do {
  num++;
  if (num === 5) continue;
  console.log(num); // 1 2 3 4 6 7 8 9 10 11
} while (num < 11);

 

label

- 특정 코드 블록에 이름을 지정하는 방법

- 이름을 지정하면, 코드 블록 내부에서 break나 continue문의 대상으로 지정 가능

- label을 최소화하는 것을 권장

 

label break

outer: for (let i=0; i<3; i++) {
  for (let j=0; j<3; j++) {
    if (i + j === 3) {
      break outer;
    }
    console.log(i, j); 
  }
}
/*
0 0 
0 1
0 2
1 0
1 1
*/

 

label continue

outer2: for (let i=0; i<3; i++) {
  for (let j=0; j<3; j++) {
    if (i+j === 3) {
      continue outer2;
    }
    console.log(i, j);
  }
}

/*
0 0
0 1
0 2
1 0
1 1
2 0
*/

함수

- 반복해서 사용하고자 하는 코드를 미리 작성

-> 반복적으로 필요한 코드를 하나의 덩어리로 묶어서 필요할 때마다 꺼내 쓸 수 있도록 하는 것

 

기본구조

function 함수이름 (parameter1, parameter2) {
  // 함수에서 사용할 코드
  // 어떤 기능을 할 지 코드로
  return 반환값;
}
함수이름 (argument1, argument2...) // 함수의 호출

 

예시) - 맛있는 라면 레시피

<나의 시크릿 라면 레시피>
1. 라면을 담을 그릇을 준비합니다.
2. 물 550ml를 끓입니다.
3. 면과 분말스프, 후레이크를 같이 넣습니다.
4. 4분 40초간 더 끓입니다.
5. 그릇에 라면을 담습니다.

-> 사람들이 라면 레시피를 알라달라고 하면, 레시피를 미리 적어두고 건내주는 것이 좀 더 호율적일 것

-> 반복적으로 필요한 코드를 하나의 덩어리로 묶어서 필요할 때마다 꺼내 쓸 수 있도록 한 것

function 나의시크릿라면레시피 () {
  let 라면그릇;
  
  물 550ml를 끓인다;
  면과 분말스프, 후레이크를 같이 넣는다;
  4분 40초간 더 끓인다;
  
  라면그릇 = 맛있는라면;
  
  return 라면그릇;
}
나의시크릿라면레시피();

 

// 두 수의 입력을 받아서 합을 출력하는 함수
function sum(num1, num2) {
  return num1 + num2;
}
console.log(sum(2, 3)); // 5
console.log(sum(5, 6)); // 11

 

함수의 기능

1. 재사용성 향상 

    - 중복되는 코드를 줄이고 동일한 코드를 반복해서 사용 가능

2. 가독성 및 유지보수성 향상

    - 함수의 역할을 쉽게 파악할 수 있고, 수정 및 업데이트가 용이

3. 구조 파악 용이

    - 기능 단위로 코드를 분리하여 구조화 가능

 

함수의 특징

매개변수와 인자

용어 번역 의미
parameter 매개변수 함수와 메서드에 입력 변수 이름
argument 전달인자, 인자, 인수 함수와 메서드에 실제 입력되는

-> 파선아실 : 파라미터는 선언 / 아규먼트는 실행

- parameter (매개변수) : 함수를 선언할 때 함수 내부에서 사용됨

- argument (인자) :  함수를 호출할 때 실제로 입려되는 값을 나타냄

function sum(num1, num2) {
  return num1 + num2; // num1, num2 -> 매개변수 (parameter)
}
sum (2, 3); // 2, 3 -> 인자(argument)

 

function sumNumbers(a, b, c) {
  console.log(`--${a} + ${b} + ${c}`); 
  return a + b + c; 
}

console.log(sumNumbers(10, 20, 50)); 
/*
-- 10 + 20 + 50
80
*/

// 인자가 매개변수보다 많을 때 -> 매개변수 수까지만 반환
console.log(sumNumbers(10, 20, 30, 40)); 
/*
-- 10 + 20 + 30
60
*/

// 인자가 매개변수보다 적을 때 -> NaN
console.log(sumNumbers(10, 20)); 
/*
-- 10 + 20 + undefined
NaN
*/
function sumNumbers(d, e, f=0) {
  console.log(`-- ${d} + ${e} + ${f}`);
  return d + e + f;
}

console.log(sumNumbers(10, 20)); 
/*
-- 10 + 20 + 0
30
*/
function sumNumbers3 (g=10, h=20, i=30) {
  console.log(`-- {-${g} + ${h} + ${i}`);
  return g + h + i;
}

// undefined -> 기본값
console.log(sumNumbers3(0, undefined, 0));
/*
-- 0 + 20 + 0
20
*/

// null -> null
console.log(sumNumbers3(null, 0, 0));
-- null + 0 + 0
0

-> 값이 전달되지 않았거나, undefined인 경우 기본값으로 반환

 

원시 call

let number = 10;

function test(num) {
  num = num + 10;
  console.log("function", num); // function 20 -> num(10) + 10
}
test(number);
console.log(number); // 10

 

객체 call

const object = {a:1, b:2};

function test2(obj) {
  obj.c = 3; // 객체가 수정됨
  obj = {name: "weniv"}; // 새로 할당
  
  console.log("function", obj); // function {name: "weniv"}
}

test2(object);
console.log(object); // {a:1, b:2, c:3}

 

반환값

- 반환값은 return 키워드를 사용하여 지정

- 함수가 반환값을 가지면 함수를 호출하여 반환되는 값 사용가능

- 함수 내부에서 return 구문을 만나게 되면 해당 함수는 종료

- 함수 내부에 return문이 없으면 undefined를 반환

 

- return문 뒤에 오는 코드는 실행되지 않음

function sum(a, b) {
  return a + b;
  console.log("return문 뒤에 오는 코드");
}
console.log(sum(2, 3)); // 5

 

- 반환값이 없는 함수는 undefined로 반환

function sub(a, b) {
  console.log(a - b);
}
console.log(sub(5, 2)); // undefined

 

- return을 만나면 함수는 종료됨

function sumNumber(a, b) {
  if (isNaN(a) || isNaN(b)) {
    console.log("숫자가 아닙니다.");
    return;
  }
  // a와 b는 숫자
  return a + b;
}
console.log(sumNumber(10, 20)); // 30 -> 10 + 20
console.log(sumNumber("hello", 2)); // 숫자가 아닙니다.

 

함수 선언하는 방법

함수 선언문과 함수 표현식

- 함수는 function + 함수이름 + ( ) + { }의 조합인 구문(Statement)으로 선언하는 선언문으로 작성가능

- 함수 이름없이 선언하여 변수에 값으로 할당하는  표현식(Expression)으로 선언하는 것도 가능

 

함수 선언식

func1();
function func1() {
  console.log("함수 선언식");
}

함수 표현식

- 함수 -> 자바스크립트 값 (인자로 함수전달 가능 -> callback함수)

- 함수 표현식은 호이스팅때문에 선언 전에 사용불가

var func2 = function func3() {
  console.log("함수 표현식");
};
func2();

 

ex)

// 함수 선언문
function sum(x, y) {
  return x + y;
}

// 함수 표현식
let sumXY = function(x, y) {
  return x + y;
};

console.log(sum(10, 20)); // 30
console.log(sumXY(10, 20)); // 30

 

화살표함수

- function 키워드를 화살표 기호로 대체해 표현함

- 선언 시 함수 이름을 정할 수 없기 때문에 표현식으로 선언하여 사용 가능

function fun1(x, y) {
  return x + y
}

// 위 함수를 화살표 함수로 작성하기
let func1 = (x, y) => {
  return x + y
}

// 함수 내부에 한 줄 표현식만 반환한다면 return키워드를 생략가능
let func2 = (x, y) => x + y;
console.log(func2(5, 10)); // 15

// 함수의 매개변수가 한 개라면 소괄호 생략가능
let func3 = x => x + 10
console.log(func3(10)); // 20
function sum1(a, b) {
  return a + b;
}
(a, b) => {
  return a + b;
}

// 함수 표현식
const arrowFunc = (a) => 2 * a;
console.log(arrowFunc(10)); // 20

// 메서드에서 콜백함수
// 함수의 인자로 다른 함수를 전달함
[1, 2, 3, 4, 5].map(function (item, index) {
  return item + index;
});

const result = [1, 2, 3, 4, 5].map((item, index) => item + index);
console.log(result); // [1, 3, 5, 7, 9]

 

즉시실행함수(IIFE - Immediately Invoked Function Expression)

- 함수를 정의함과 동시에 즉시 실행하는 방법

(function () {
  console.log("함수를 바로 실행합니다."); // 함수를 바로 실행합니다.
}){};

const iifeFunc = (function () {
  console.log("표현식으로 작성한 즉시 실행함수"); // 표현식으로 작성한 즉시 실행함수
  let value = 0;
  
  return {
    increment: function () {
      value++;
    },
    print: function () {
      console.log(value); //1 1
    },
  };
})();

console.log(iifeFunc); // {increment: f, print: f}
iifeFunc.increment();
iifeFunc.print();

// 단축평가를 이용한 반환값
function test() {
  return null || "b";
}
console.log(test()); // b

전개 구문 (Spread systax)

- 배열이나 객체와 같은 데이터 구조를 확장할 때 사용하는 문법

- 배열이나 객체를 쉽게 복사하거나, 새로운 배열이나 객체 생성 가능 -> 전개식

 

배열의 전개 구문

- 대괄호( [ ] )안에서 세 개의 점(...)을 사용하여 배열을 확장

const fruits = ["사과", "파인애플", "수박"];
const fish = ["조기", "갈치", "다금바리"];
const food = [...fruits, ...fish];

console.log(food);
/*
Array(6)
0: "사과"
1: "파인애플"
2: "수박"
3: "조기"
4: "갈치"
5: "다금바리"
*/

console.log(fruits.concat(fish));
/*
Array(6)
0: "사과"
1: "파인애플"
2: "수박"
3: "조기"
4: "갈치"
5: "다금바리"
*/

 

- 배열의 전개구문을 이용하면 얕은 복사가 가능

const fruits = ["사과", "파인애플", "수박"];
const fish = ["조기", "갈치", "다금바리"];
const food = [...fruits, ...fish];

const copyFruits = [...fruits];
copyFruits.push("망고");

console.log("fruits", fruits);
/*
fruits ["사과", "파인애플", "수박"]
*/

console.log("copyFruits", copyFruits);
/*
copyFruits ["사과", "파인애플", "수박", "망고"]
*/

 

객체의 전개 구문

- 중괄호 ( { } )안에서 세 개의 점(...)을 사용하여 객체를 확장

const weniv1 = {gary:1, binky:2};
const weniv2 = {licat:3};
const weniv = {...weniv1, ...weniv2};

console.log(weniv);
/*
{gary:1, binky:2, licat:3}
*/


const me = {name:"weniv", address:"jeju"};
const copyMe = {...me};
copyMe.number = 1;

console.log("me", me);
/*
me{name:"weniv", address:"jeju"}
*/

console.log("copyMe", copyMe);
/*
copyMe {name:"weniv", address:"jeju", number:1}
*/

 

- 객체의 전개구문 : key값이 동일하면 덮어쓰기가 가능

- 가장 마지막에 오는 값이 됨

const obj1 = {name: "weniv", address: "jeju"};
const obj2 = {address: "seoul"};
const obj = {...obj1, ...obj2};

console.log(obj);
/*
{name: "weniv", address: "seoul"}
*/

console.log(obj.address);
/* seoul */

 

구조분해할당 (destructuring)

- 배열이나 객체와 같은 데이터 구조를 분해하여 변수에 할당하는 표현식

- 변수에 속성이나 요소를 간편하게 할당 가능

const foods = {
  food1: "과일",
  food2: "생선",
  food3: "채소",
};

/*
let food1, food2, food3;
food1 = foods["food1"];
food2 = foods["food2"];
food3 = foods["food3"];
console.log(food1, food2, food3); // 과일 생선 채소
*/
const obj = {one: 1, two: 2};
let {two: myNum} = obj;

console.log(myNum); // 2

/*
let {one: one, two: two} = {one: 1, two: 2};
console.log(one); // 1
console.log(two); // 2
*/
let {one, two, three} = {one: 1, two: 2};

console.log(one); // 1
console.log(two); // 2
console.log(three); // undefined
let {food1, food2, food3} = foods;

console.log(food1, food2, food3); // 과일 생선 채소

 

배열의 디스트럭처링

- 대괄호( [ ] )를 사용하여 할당할 변수 이름을 나열하는 방식

- 배열의 요소를 각각의 변수에 할당 가능

const arr = [1, 2, 3, 4, 5];

let [a, b, c] = arr;

console.log(a, b, c); // 1 2 3

 

- 빈값으로 두면 필요한 값만 가져옴

let [d, , f] = [1, 2, 3, 4, 5];
console.log(d, f); // 1 3
let [x, y, z] = [1, 2];

console.log(x, y, z); // 1 2 undefined

 

함수의 매개변수 디스트럭처링

- 함수의 매개변수를 분해하여 변수에 할당하는 방법

- 함수에서 각각의 인수를 간편하게 사용가능

- 객체나 배열을 매개변수로 받는 함수에서 유용하게 사용됨

- 코드의 가독성과 유지보수성을 높이는데 도움이 됨

function func1({a, b}) {
  console.log(a, b); // hello world 10 20 
}

// 매개변수 {a, b} = {a: 'hello;, b:'world'} 인자
func1({a: "hello", b: "world"});

// {a, b} = {b: 20, a: 10}
func1({b: 20, a:10}); // 10 20

function func2([a, b, c]) {
  console.log(a, b, c); // 10 20 30
}

// 매개변수 [a, b, c] = [10, 20, 30] 인자
// 순서대로 들어감
func2([10, 20, 30]);