배열을 순회하기 위한 함수지만, 기존 for문과는 약간 다르게 동작한다.
배열과 함께 콜백함수를 인자로 갖고,배열 요소를 하나 꺼낸 후, 매개변수로 요소를 전달하여 콜백함수를 실행한다. 첫번째 매개변수는 배열의 데이터, 두번째는 인덱스, 세번째는 객체 전체를 반환한다.
const arr = [1, 2, 3, 4, 5];
arr.forEach((a, b, c) => {
console.log(`a : ${a}, b: ${b}, c:${c}`);
});
출력
a : 1, b : 0, c : 1,2,3,4,5
a : 2, b : 1, c : 1,2,3,4,5
a : 3, b : 2, c : 1,2,3,4,5
a : 4, b : 3, c : 1,2,3,4,5
a : 5, b : 4, c : 1,2,3,4,5
Map에서 forEach문을 동작시킬 경우, 매개변수가 value, key, Map 순으로 동작한다.
let map = new Map();
map.set(7, "seven");
map.set(9, "nine");
map.set(8, "eigth");
map.forEach((a, b, c) => {
console.log(`a : ${a}, b : ${b}, c : ${c}`);
});
출력
a : seven, b : 7, c : [object Map]
a : nine, b : 9, c : [object Map]
a : eigth, b : 8, c : [object Map]
const arr = [1, 2, 3, 4, 5];
arr.map((a, b, c) => {
console.log(`a : ${a}, b : ${b}, c : ${c}`);
});
출력
a : 1, b : 0, c : 1,2,3,4,5
a : 2, b : 1, c : 1,2,3,4,5
a : 3, b : 2, c : 1,2,3,4,5
a : 4, b : 3, c : 1,2,3,4,5
a : 5, b : 4, c : 1,2,3,4,5
다음과 같이 foreach가아닌 map을 사용해도 출력하는결과에 차이가 크게 없음을 알 수 있다.
그렇다면 둘은 어떤 차이가 있을까?
const foreachArr = arr.forEach((a, b, c) => {
console.log(`a : ${a}, b : ${b}, c : ${c}`);
return a * 2;
});
const mapArr = arr.map((a, b, c) => {
console.log(`a : ${a}, b : ${b}, c : ${c}`);
return a * 2;
});
console.log(`foreach 리턴 값 : ${foreachArr}
map 리턴 값 : ${mapArr}`);
출력
foreach 리턴 값 : undefined
map 리턴 값 : 2,4,6,8,10
다음과 같이 foreach는 리턴 값이 존재하지 않는다는 차이가 있다.
필요없는 데이터를 삭제하기 위한 메소드이다.
request 값으로는 id, response로는 삭제가 완료되었다는 내용을 담는다.
데이터를 수정하기 위한 메소드 이다.
request 값으로는 id와 body, response값은 변경이 완료되었다는 내용을 담는다.
코드내용 혹은 구조를 바꾸는 것. 즉, 나쁜 코드를 클린 코드로 변환하는 과정을 나타낸다.
※ 단, 배포, 운영 직전에는 코드 수정이 일어나선 안된다.
오늘의 소감
오늘부로 GET POST DELETE PUT 모든 메소드를 다 다뤄보았다. 이제는 이 메소드들을 이용해 직접 뭔가를 만들어볼 수도있을것 같은 생각이 든다. 과거 JSP를 기반으로한 백엔드를 아주 살짝 다뤄 봤는데 동작하는 방식 자체는 크게 다른것 같지 않아보인다.