기존 문제점

URLSearchParams

: URL의 쿼리 부분을 수비게 파싱하고, 조작하고, 반복할 수 있는 방법 제공

<aside> ❓ 갑자기 궁금해지는 searchParams와 searchParam의 차이

URLSearchParams 객체 사용해보기

  1. searchParams 선언

    const searchParams = new URLSearchParams('<http://localhost:3000/home?a=1&b=2&c=3>');
    console.log(searchParams.toString());
    

    Screenshot 2024-02-10 at 3.44.58 PM.png

  2. append

    cconst searchParams = new URLSearchParams('<http://localhost:3000/home?a=1&b=2&c=3>');
    searchParams.append('c','4');
    searchParams.append('c','5')
    console.log(searchParams.toString());
    

    Screenshot 2024-02-10 at 3.46.59 PM.png

  3. delete

    cconst searchParams = new URLSearchParams('<http://localhost:3000/home?a=1&b=2&c=3>');
    searchParams.append('c','4');
    searchParams.append('c','5');
    searchParams.delete('c');
    console.log(searchParams.toString());
    

    Screenshot 2024-02-10 at 3.47.46 PM.png

URLSearchParams의 한계

delete메서드를 사용하면, 해당 key에 대한 모든 searchParams를 제거한다.

즉, 원하는 key & value쌍을 제거하지 못한다.

해결 방안

URLSearchParams객체를 우선 다루기 쉬운 형태로 바꾸어야 한다. 기존 searchParams는 key-value형태이므로 객체 리터럴 혹은 Map이 적절하다. 둘 중에 순회를 용이하게 하기 위해서는 Map이 객체 리터럴보다 더 적절하다고 판단하였다. 또한 has, get, delete를 이용하여 보다 용이하고 명시적인 데이터 조작이 가능하다는 장점이 있다.

Map으로 변환을 하고 해당 객체를 계속 사용할 것이기에 class로 추상화하는 것이 적절하다고 판단하였다. 함수로 추상화를 할 경우, Map으로 변환한 객체를 함수를 사용하는 측에서 하거나, 혹은 함수를 사용할 때마다 Map으로 변환하여 해당 객체 변수를 가지고 있어야 한다.

이러한 Map으로 변환한 객체를 class의 프로퍼티로 가지고 있으면 적절하다고 판단하였다.

1. searchParamsMap 프로퍼티