DEV

LeetCode #2704쉬움

2704. 존재 여부

2704. To Be Or Not To Be

Algorithm
해설 읽기 3
javascript

문제 설명

개발자가 자신의 코드를 테스트할 수 있도록 expect 함수를 작성하세요. 이 함수는 임의의 값 val을 받아 아래의 두 가지 기능을 수행하는 객체를 반환해야 합니다.

toBe(val)는 다른 값을 받아 두 값이 ===로 동일하면 true를 반환합니다. 만약 같지 않으면 "Not Equal"이라는 오류를 발생해야 합니다.
notToBe(val)는 다른 값을 받아 두 값이 !==로 서로 다르면 true를 반환합니다. 만약 같다면 "Equal"이라는 오류를 발생해야 합니다.

예제

예제 1

입력: func = () => expect(5).toBe(5)
출력: {"value": true}
설명: 5 === 5이므로 이 표현식은 true를 반환합니다.

예제 2

입력: func = () => expect(5).toBe(null)
출력: {"error": "Not Equal"}
설명: 5 !== null이므로 이 표현식은 "Not Equal" 오류를 발생시킵니다.

예제 3

입력: func = () => expect(5).notToBe(null)
출력: {"value": true}
설명: 5 !== null이므로 이 표현식은 true를 반환합니다.

해결 방법

🎯접근 방식

이 문제는 객체 지향 프로그래밍의 개념을 활용하여 함수형 인터페이스를 구현하는 문제입니다. expect 함수는 주어진 값을 기준으로 두 가지 메서드 toBenotToBe를 가진 객체를 반환합니다. 이 메서드들은 각각 값의 일치 여부를 확인하고, 조건에 따라 true를 반환하거나 오류를 발생시킵니다. 핵심 아이디어는 함수 호출을 통해 조건 검증을 수행하는 객체를 생성하는 것입니다.

솔루션 코드

복잡도 분석

시간 복잡도:O(1)
공간 복잡도:O(1)

💡상세 설명

이 문제는 JavaScript에서 expect라는 함수와 그 함수가 반환하는 객체의 메서드를 사용하여 값의 일치 여부를 확인하는 기능을 구현하는 것입니다. 이 문제의 핵심은 두 값을 비교하여 동일한지 또는 다른지를 확인하고, 그에 따라 적절한 결과를 반환하거나 오류를 발생시키는 것입니다.

1. 알고리즘의 핵심 아이디어

이 알고리즘의 핵심 아이디어는 두 값을 비교하여 같으면 true를 반환하고, 다르면 Error를 던지는 것입니다. 두 가지 메서드 toBenotToBe를 제공하여 각각 값이 같은지, 다른지를 확인합니다.

2. 코드의 주요 로직 설명

  • expect 함수는 입력 값 val을 받아 객체를 반환합니다.
  • 반환된 객체는 두 개의 메서드를 가지고 있습니다:
    • toBe(compareVal): valcompareVal이 같으면 true를 반환하고, 다르면 Error를 던집니다.
    • notToBe(compareVal): valcompareVal이 다르면 true를 반환하고, 같으면 Error를 던집니다.

3. 각 단계별 동작 과정

  1. expect 함수가 호출되면, 입력 값 val을 받아서 객체를 반환합니다.
  2. 반환된 객체는 두 메서드 toBenotToBe를 가지고 있습니다.
  3. toBe 메서드는 valcompareVal을 엄격 비교(===)하여 같으면 true를 반환하고, 다르면 Error('Not Equal')를 던집니다.
  4. notToBe 메서드는 valcompareVal을 엄격 비교하여 다르면 true를 반환하고, 같으면 Error('Equal')를 던집니다.

4. 핵심 변수들의 역할

  • val: expect 함수가 처음 호출될 때 전달받는 값으로, 비교의 기준이 됩니다.
  • compareVal: toBenotToBe 메서드가 호출될 때 전달받는 값으로, val과 비교됩니다.

5. 왜 이 방법이 효과적인지

이 방법은 간단하고 직관적입니다. expect 함수는 테스트 프레임워크에서 흔히 사용하는 패턴으로, 값의 일치 여부를 확인할 때 매우 유용합니다. toBenotToBe 메서드는 각각의 비교 상황에 맞게 동작하며, 오류 메시지를 통해 개발자가 어떤 비교가 실패했는지 쉽게 알 수 있게 해줍니다. 이러한 구조는 코드의 가독성을 높이고, 유지보수를 용이하게 만듭니다.

이 알고리즘은 테스트 시나리오에서 자주 사용되는 패턴을 구현한 것으로, 다양한 상황에서 값의 비교를 효과적으로 처리할 수 있습니다.

관련 문제