과제에서 input태그의 입력값에 천 단위로 ","를 찍어야 하는 부분이 있었다. 처음에는 자체적으로 로직을 적용해서 구현하려고 했었다.
로직이 생각보다 복잡했는데 그 이유인 즉슨 이랬다.
쉼표가 찍히는 구간이 input의 event.target.value를 inputPrice라고 한다면 inputPrice에 쉼표가 찍히는 구간은
i = 1부터 Math.floor((priceStr.length - 1) / 3)일 때까지 특정 작업을 반복해야 하는데
1. 원본에서 뒷자리 세자리를 끊어서 ","를 붙인다.
2. 원본에서 뒷자리 세자리를 제외한 숫자들만 남긴다.
3. 1번의 작업을 반복한 결과와 2번의 작업의 결과를 붙인다.
단계로 나누면 굉장히 짧지만, 기본적으로 event.target.value가 string형 데이터로 들어오고, 대부분의 작업은 배열의 메서드로 이뤄지기 때문에 string과 number와 array를 계속적으로 왔다갔다해야하는 작업이었다.
그래서 꽤 길게 작업을 했음에도 원치 않는 결과가 나오던 차에 페어분이 진행하신 작업을 보게 되었다.
const priceHandler = (event) => {
const priceStr = event.target.value;
const priceNum = Number(priceStr.replaceAll(",", ""));
setPrice(priceNum.toLocaleString());
};
지금쯤부터는 모든 함수의 로직을 손수 구현할 필요는 없다는 생각이 든다. 일견 어렵지 않아보이는 작업도 실상은 생각보다 손이 훨씬 더 많이 가는 경우가 많다. 이정도로 흔한 기능에 대해서는 메서드가 이미 구현되어 있는 경우가 많기 때문에 과제에 들어가기 전에 한번쯤 검색해볼 필요를 느낀다.