개발자 첫걸음/The WEb Developer BootCamp 2022

Section 23: JavaScript의 최신 기능들

프로아마추어 2022. 4. 26. 00:57

1. 기본 매개 변수

  • 이전까지 함수를 사용할 때 매개 변수는 선택사항이었다.
  • 이번에는 매개 변수를 default 값으로 설정해보자.

예제 1 : default 매개변수를 사용하지 않은 함수

// 주사위의 눈을 입력 받아 랜덤으로 숫자 출력
function rollDice(num) {
    // 만약 매개변수 값을 전달받지 못하면 1~6의 눈 출력
    if(num === undefined) num = 6;
    return Math.floor(Math.random() * num) + 1;
}

rollDice() // 1~6의 숫자 중 하나의 숫자가 출력된다.

예제 2 : default 매개변수를 사용한 함수

// 매개변수의 기본 값을 6으로 설정한다.
function rollDice(num = 6) {
    return Math.floor(Math.random() * num) + 1;
}

rollDice() // 1~6의 숫자 중 하나의 숫자가 출력된다.

예제 3: default 매개변수의 주의점

// 항상 인자로 받을 매개변수를 default 매개변수보다 앞에 명시해주도록 하자.
function greet(say='반가워!!!', nickname) {
    console.log(`${say} ${nickname}`);
}

greet('뚝딱아') // 뚝딱아 undefined

 

2. 함수 호출 시의 spread 구문

  • spread 구문이란 반복 가능한 배열과 같은 객체를 0개 이상의 요소로 확장한다.
  • spread 구문을 사용하면 객체를 변경하지 않고 복사할 수 있다.
  • 함수의 인수 값에 특정 키워드를 통해 spread 구문을 넣어보자.

예제 1

const nums = [9, 3, 2, 8];

// 배열 자체의 메모리 참조 값이 인수로 들어간다.
Math.max(nums); // NaN

// 배열의 각 요소들이 인수로 들어간다.
Math.max(...nums); // 9

예제 2

console.log('hello'); // hello

// 인덱스를 가지고 있는 문자열 또한 배열처럼 spread 구문을 사용할 수 있다.
// 함수의 인수로 문자열을 각각 문자로 쪼개 넣은 결과와 같다.
console.log(...'hello'); // h e l l o
 
console.log('h','e','l','l','o'); // h e l l o

 

3. 배열 리터럴 spread 구문

예제 

const cats = ['밍키', '복실이'];
const dogs = ['백구', '까몽이', '순철이'];

// 두 개 이상의 배열을 합쳐 복사하기
const allPets = [...cats, ...dogs];

allPets // ['밍키', '복실이', '백구', '까몽이', '순철이']

// 강아지 '흑구' 추가하기
[...cats, ...dogs, '흑구']; // ['밍키', '복실이', '백구', '까몽이', '순철이', '흑구']

 

4. 객체 spread 구문

  • 객체를 복사하거나 새로운 객체를 만들 수 있다.

예제 

const feline = { legs: 4, family: 'Felidae'};
const canine = { family: 'Caninae', furry: true};

// 객체를 복사해 속성 값에 'isPet'을 추가
const dog = { ...canine, isPet: true};
// {family: 'Caninae', furry: true, isPet: true}

// 객체를 복사해 속성 값에 'genus'을 추가
const lion = { ...feline, genus: 'Panthera'};
// {legs: 4, family: 'Felidae', genus: 'Panthera'}

// 두 객체를 결합하여 복사
const catDog = { ...feline, ...canine};
// {legs: 4, family: 'Caninae', furry: true}

 

5. Rest 매개 변수

  • rest 매개 변수는 spread 구문과는 전혀 다르다.
  • 인수 객체는 유사 배열 객체라고 부른다.
  • 인덱스를 사용하여 접근하고 배열 메서드를 사용할 수 없다.
  • 인수 객체는 함수로 전달된 모든 인수를 가지고 있다.

예제 1 : 인수 객체

function sum() {
    // arguments 객체는 인수 전체를 가르킨다.
    // 배열이 아니기 때문에 배열 메서드를 사용할 수 없다.
    const total = arguments.reduce((sum, num) => sum + num, 1);
    // Arguments(4) [1, 3, 5, 7, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}

sum(1, 3, 5, 7);

예제 2: rest 매개 변수1

// 인수 객체를 사용했을 때와는 달리 
// rest 매개 변수로 배열 메서드 사용이 가능하다.
function sum(...nums) {
    return nums.reduce((sum, num) => sum + num, 1);
}

sum(1, 3, 5, 7) // 17

예제 3: rest 매개 변수2

function raceResults(gold, silver, ...others) {
    console.log(`대망의 금메달 수여자는 ${gold}님!!!`);
    console.log(`축하드립니다! 은메달 수여자는 ${silver}님`);
    console.log(`참가해 주신 ${others} 여러분 모두 수고하셨습니다!!`);
}

raceResults('나빨라', '한번에', '러닝광', '늘달려', '심장둘');

// 대망의 금메달 수여자는 나빨라님!!!
// 축하드립니다! 은메달 수여자는 한번에님
// 참가해 주신 러닝광,늘달려,심장둘 여러분 모두 수고하셨습니다!!
 
 

6. 배열 분해

  • 비구조화 할당을 통해 배열 값이나, 객체의 속성 값을 변수에 담을 수 있다.

예제 1

const scores = [878865, 766588, 987544, 935378, 843391, 790542];

// const 배열의 첫번째 요소를 first 변수에 할당한다.
// ...
// others 변수는 네번째 요소부터 마지막 요소가 들어있는 배열이 할당되었다.
const [first, second, third, ...others] = scores;

first // 878865
second // 766588
third // 987544
others // [935378, 843391, 790542]

 

7. 객체 분해

  • 이번에는 객체를 분해해보자.

예제 1: 객체 분해

const user = {
	email: 'test@gmail.com',
	password: 'sEcRet777',
	firstName: '길동',
	lastName: '홍',
	born: 1932,
	died: 1977,
	city: 'Incheon',
	country: 'South Korea'
}

// 아래의 코드와 같은 코드
// const email = user.email; test@gmail.com

// 변수 선언 순서와 무관하게 변수명과 객체의 속성 값만 같으면 할당 받을 수 있다.
const { email, firstName, lastName, city, country } = user;

email // 'test@gmail.com'
firstName // '길동'
lastName // '홍'
city // 'Incheon'
country // 'South Korea'

const { born: birthYear, died: deathYear } = user;
birthYear // 1932
deathYear // 1977

예제 2: 객체 분해 (default 속성 추가)

const user2 = {
	email: 'test2@gmail.com',
	firstName: '산범',
	lastName: '장',
	born: 1913,
}

// user2에 존재하지 않는 속성을 할당 받을 때 'N/A'값을 default 값으로 할당 받는다.
// 존재하는 속성 값을 할당 받는다면 default 값은 무시된다.
const { born, died = 'N/A'} = user2
born // 1913
died // N/A

 

8. 매개 변수 분해

  • 함수를 정의할 때 괄호 안에 매개변수를 작성하면 전달되는 값의 구조를 분해할 수 있다.
  • 객체에서 주로 사용하던 방법이다.

예제 1: 매개 변수 분해

const user = {
	email: 'test@gmail.com',
	password: 'sEcRet777',
	firstName: '길동',
	lastName: '홍',
	born: 1932,
	died: 1977,
	city: 'Incheon',
	country: 'South Korea'
}

function fullName({ firstName, lastName }) {
	console.log(`${firstName} ${lastName}`);
}

fullName(user); // 길동 홍

예제 2: 매개 변수 분해

const movies = [
    {
        title: '신세계',
        score: 8.7
    },
    {
        title: '극한직업',
        score: 8.3
    },
    {
        title: '타짜',
        score: 9.6
    },
    {
        title: '엑시트',
        score: 8.85
    },
    {
        title: '설국열차',
        score: 9.1
    },
]

const movieInfo = movies.map(({title, score}) => `${title}의 평점은 ${score}점`);
// ['신세계의 평점은 8.7점', '극한직업의 평점은 8.3점', '타짜의 평점은 9.6점', '엑시트의 평점은 8.85점', '설국열차의 평점은 9.1점']

 

'개발자 첫걸음 > The WEb Developer BootCamp 2022' 카테고리의 다른 글

Section 25: DOM Event  (0) 2022.04.28
Section 24: DOM이란?  (0) 2022.04.27
Section 22: 콜백과 배열  (0) 2022.04.25
Section 21: 함수 레벨 업  (0) 2022.04.25
Section 20: 함수란?  (0) 2022.04.25