트랙
/
JavaScript
JavaScript
/
연습 문제
/
Elyse의 구조 분해 마법
Elyse의 구조 분해 마법

Elyse의 구조 분해 마법

학습 연습 문제

소개

배열 구조 분해

JavaScript의 배열 구조 분해 문법은 배열에서 값을 꺼내 각각 다른 변수에 할당하는 간결한 방법이에요.

다음 예제에서는 numberOfMoons 배열의 각 값이 해당하는 행성에 할당돼요:

const numberOfMoons = [0, 2, 14];
const [venus, mars, neptune] = numberOfMoons;

neptune;
// => 14

정리하면:

  • 이 문법으로 배열에서 위치로 정해진 원소에 이름을 붙일 수 있고, 재할당을 통해 변수끼리 값을 바꿀 수도 있어요.
  • 구조 분해 문법은 함수 매개변수 안에서 사용할 수 있고, 모든 이터러블에서 사용할 수 있어요.
  • 위치에 이름을 붙이지 않으면(어떤 변수 이름도 쓰지 않으면) 그 위치는 조용히 무시돼요.

객체 구조 분해

JavaScript에는 객체에서 속성을 꺼내 각각 다른 변수에 할당하는 구조 분해 문법도 있어요.

다음 예제에서는 weather 객체에서 날씨 기호를 꺼내요:

const weather = {
  sun: '☀️',
  sun_behind_small_cloud: '🌤️',
  sun_behind_cloud: '⛅',
  sun_behind_large_cloud: '🌥️',
  sun_behind_rain_cloud: '🌦️',
  cloud: '☁️',
  cloud_with_rain: '🌧️',
  cloud_with_snow: '🌨️',
  cloud_with_lightning: '🌩️',
  cloud_with_lightning_and_rain: '⛈️',
};

const { sun, cloud, cloud_with_lightning: thunder } = weather;

sun;
// => '☀️'

cloud;
// => '☁️'

thunder;
// => '🌩️'

정리하면:

  • 이 문법으로 속성을 그대로 꺼낼 수도 있고, 꺼내면서 이름을 바꿀 수도 있어요.
  • 구조 분해 문법은 함수 매개변수 안에서 사용할 수 있어요.

지침

마술사 지망생 Elyse는 훈련을 계속해요. Elyse에게는 조작하고 싶은 카드 덱이 있어요.

일을 더 쉽게 하기 위해 보통은 2부터 10까지의 숫자가 적힌 카드로만 시작하지만, 어떤 마술에는 추가 (그림) 카드가 등장하기도 해요.

Note

카드를 섞는 방법은 아주 많지만, 마술의 환상을 유지하려면 어떤 단일한 방법도 사용하지 않는 것이 중요해요. 예를 들어 Elyse는 splice, slice, shift, unshift, push, at을 사용하지 않아요. 배열 접근자 array[index]와 객체 접근자(object[key] 및 object.key) 역시 절대 사용하면 안 돼요.

Elyse가 마술 실력을 키우도록 도와주고 싶나요?

Advanced

모든 함수는 매개변수와 단일 return expression이 있는 함수 본문을 사용해 구현할 수 있어요.

1. 첫 번째 카드 가져오기

Elyse는 array[index], .at(index), .shift()를 사용하지 않고 덱의 첫 번째 카드를 불러와요. 정말 마법 같아요.

const deck = [5, 9, 7, 1, 8];

getFirstCard(deck);
// => 5

2. 두 번째 카드 가져오기

Elyse는 손재주를 부려 array[index]나 .shift()를 사용하지 않고 덱의 두 번째 카드를 불러와요.

const deck = [3, 2, 10, 6, 7];

getSecondCard(deck);
// => 2

3. 두 카드 맞바꾸기

Elyse는 덱의 두 카드 위치를 서로 바꿔요. 함수를 하나도 호출할 필요가 없어요.

const deck = [10, 7];

swapTwoCards(deck);
// => [7, 10]

4. 카드 세 장 돌리기

좀 더 현란한 손재주를 부리기 위해, Elyse는 카드 세 장을 집어 맨 위 카드를 재빨리 맨 뒤로 옮겨서 가운데 카드가 첫 번째 카드가 되고, 원래 맨 아래 카드가 가운데 카드가 되게 해요. 함수를 하나도 호출할 필요가 없어요.

const deck = [2, 6, 10];

shiftThreeCardsAround(deck);
// => [6, 10, 2]

5. 이름 붙은 더미 고르기

Elyse는 덱을 두 더미로 나눠요. 그다음 관객에게 두 더미 중 하나를 고르게 하는데, 이것을 chosen이라고 부를게요. disregarded 더미는 더 이상 중요하지 않으므로, Elyse는 이 더미를 사라지게 만들어요. 함수를 하나도 호출할 필요가 없어요.

const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];

pickNamedPile({ chosen, disregarded });
// => [5, 4]

5. 고른 더미 맞바꾸기

안타깝게도 관객은 계속 "잘못된" 더미를 고르지만, 빠르고 영리한 마술로 Elyse는 chosen 더미의 이름을 disregarded로, disregarded 더미의 이름을 chosen으로 바꿔요. 함수를 하나도 호출할 필요가 없어요.

const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];

swapNamedPile({ chosen, disregarded });
// => { chosen: [7, 10], disregarded: [5, 4] }
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
JavaScript Exercism

Elyse의 구조 분해 마법 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 JavaScript 트랙을 개념 37개연습 문제 159개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.