✏️2주차 QUIZ

박시은·2023년 5월 26일
0

JavaScript

목록 보기
24/58
post-thumbnail

▶ Quiz 1. 변하지 않는 것

제출할 디렉토리 이름week3/ex00
제출할 파일 이름time.js

5월 17일, 영민이는 학교에 떨어져 있는 의문의 구슬을 만지자 갑자기 타임워프를 할 수 있는 능력이 생겼습니다. 이를 실험하고자 time.js를 만들었지만, 아쉽게도 time.js를 작성하는 도중 타임워프를 해 코드가 다 완성하지 못했습니다. 여러분들은 미완성인 time.js를 완성하는 걸 도와줘야 합니다!

현재 영민이의 time.js에는 다음과 같이 적혀있습니다.

const month = /* TODO */;
let day = /* TODO */;

const timeWarp = (newMonth, newDay) => {
  // TODO
}

위 코드를 완성할 때 다음과 같은 조건을 만족해야 합니다.

  • 작성된 코드는 수정할 수 없습니다. 주석 부분에만 여러분의 코드를 채울 수 있습니다.
  • month와 day에는 시간 정보가 저장되어야 합니다. 맨 처음 선언에는 현재 날짜인 5월 17일을 저장하면 됩니다.
  • timeWarp 함수를 통해 시간을 이동할 수 있어야 합니다. 시간이 이동되었다는 것은, month와 day에 있는 정보가 변경되어야 합니다.
timeWarp(5, 10);
timeWarp(11, 20);

💡hint!
const - JavaScript | MDN


▷풀이

아래는 처음에 작성한 코드인데,
const는 재할당이 안되기 때문에 오류가 발생했다.

const month = 5;
let day = 17;

const timeWarp = (newMonth, newDay) => {
  month = newMonth;
  day = newDay;
};
timeWarp(12, 25);
console.log(`${month}${day}일로 시간이 이동되었습니다.`);

이를 어떻게 해결해야할까?
간단히 constlet으로 변경해주면 되지만, 작성한 코드는 수정할 수 없다는 문제의 조건 때문에 변경할 수 없다.
음,..어떻게 풀지 재할당을 하지 않고 푸는 방법은 없을 것 같은데..... 답이 있긴 한걸까🥲😭
확실한 건 month = newMonth; 가 불가능 하다는 것이다.


month는 변경할 수 없으니 새로운 변수 addMonth를 생성하여 문제를 해결하였다!
생각보다 간단한 문제였다. 😎

const month = 5;
let day = 17;

const timeWarp = (newMonth, newDay) => {
  const addMonth = newMonth;
  day = newDay;
  console.log(`${addMonth}${day}일로 시간이 이동되었습니다.`);
};
timeWarp(12, 25);



▶ Quiz 2. Time to change!

제출할 디렉토리 이름week3/ex01
제출할 파일 이름dynamicType.js

It’s time to change! 매개 변수를 받고, 그 값을 저장하고, 이를 외부의 함수를 통해 동적으로 타입을 변환하면서 출력하는 객체 dynamicType을 만들어봅시다.

  • 여러분은 아래처럼 작동하는 dynamicType 객체를 만들게 됩니다!
// in dynamicType.js
const dynamicType = {
		value: undefined,
		type: undefined,
    put : //이곳에 함수 작성,
    change : //이곳에 함수 작성,
    printType : //이곳에 함수 작성,
}
  • 아래의 3가지 함수들을 작성해주세요! : put, change, printType
  • put은 Number 타입의 매개변수를 받아서, 객체 내부에 매개변수로 넣은 값을 저장합니다.
  • put 함수는 printType을 실행하기 전까지 처음 한 번만 사용하여야 합니다.
  • change 함수는 put 함수로 받은 값을 이용해서 매개변수에 문자열로 넣은 타입에 맞게 형변환을 합니다.
  • change 함수는 아래의 type에 대해서 형변환을 지원해야 합니다. : String, Number, Object, Array
  • 어떻게 형변환 할 건지는 여러분의 자유입니다. 그러나 처음 받았던 값을 아래처럼 잃어버리지 않게 해주세요!
type.put(42); // type === Number
type.change("Array"); // 입력 값이 Array로 변경되어야 함
type.printType(); // 변경된 값이 출력되어야함 문자열의 경우 따옴표까지
  • change 함수는 put 함수를 사용하기 전에 작동되어서는 안됩니다.
  • printType 함수를 실행하면 마지막으로 형변환된 값이 콘솔에 출력되어야 합니다.
type.put(42);
type.change("String");
type.printType(); // 42, String

hint: Array.isArray(value);


▷풀이

아래는 처음에 작성한 코드이다.

const dynamicType = {
  value: undefined,
  type: undefined,
  put: function (newValue) {
    if (typeof this.value === "undefined") {
      this.value = newValue;
    } else {
      console.log(
        "put 함수는 printType을 실행하기 전까지 처음 한 번만 사용하여야 합니다."
      );
    }
  },
  change: function (newType) {
    if (typeof this.value !== "undefined") {
      switch (newType) {
        case "String":
          this.value = String;
          break;
        case "Number":
          this.value = Number;
          break;
        case "Object":
          this.value = Object;
          break;
        case "Array":
          this.value = Array;
          break;
      }
      this.type = newType;
    } else {
      console.log(
        "change 함수는 put 함수를 사용하기 전에 작동되어서는 안됩니다."
      );
    }
  },
  printType: function () {
    console.log(`${this.value}${this.type}`);
  },
};
dynamicType.put(5);
dynamicType.change("Array");
dynamicType.printType();

change: function (newType){} 이 부분에서 오류가 발생하는 것 같다.
어떻게 수정해야할까? this.value = String; 이렇게 하는 것이 가능한가?
어떻게............수정........해야........할까

profile
블로그 이전했습니다!

0개의 댓글