forEach | for in | for of

jh_leitmotif·2021년 6월 10일
0

🧐 어떤 반복문을 써야할까?

'반복문' 하면 머릿속에 바로 떠오르는 것이 있다.

for (int i=0; i<n; i++){
~}
do{~}while(~)
while(~){}

그렇듯 아직 자바스크립트에서 사용하는 루프문에 대해 크게 익숙하지 않다.

C, Java, Python 등이 익숙한 나는 js의 방식을 한 번 정리해야겠다고 마음 먹었다.


✔ forEach

forEach는 반복문이 아닌 함수.

const arr=[1,2,3,4,5];
arr.forEach(item=>{
	console.log(item);
});
//1 2 3 4 5 순서로 출력.

Array object에 적용된다.

✔ for in

for in은 객체가 상속받는 prototype chain 상의 모든 property key를 나열한다.

즉, 키와 값의 쌍 뿐만 아니라 함수가 있다면 또한 확인하여 출력한다.

const obj={
	a:0,
	b:1,
	c:2,
};

for (const key in obj){
	console.log(key, obj[key]);
}
// key에 접근하므로 a,b,c 순서로 출력.

JS를 공부하면서 자료형이 비교적 자유롭다고 느꼈는데, 예를 들면 함수를 변수에 저장해둔다거나 위처럼 키와 값의 쌍으로 저장하는 사례였다.

당연한 이야기지만 실제 프로그램을 설계할 때 각각의 변수명, 키값, 함수명을 더 조심하며 작성해야겠다는 생각이 들었다.

✔ for of

iterable한 Object에 대한 반복문.
Symbol.iterator 속성을 가지는 컬렉션에 대해서'만' 반복한다.

const arr = [1,2,3,4,5]
for (const val of arr){
	console.log(val);
}
/// a, b, c 순서로 하나씩 출력된다.

const obj={
	a:0,
	b:1,
	c:2,
};
for (const val of obj){
	console.log(val);
}
// obj는 한 번에 하나씩 member를 반환하는 객체는 아니다. 
// 따라서 타입 에러가 발생할 것.

🎯 성능 비교

웹 개발 중 대량의 데이터를 다룰 때가 있을텐데... 무슨 반복문을 쓰느냐 또는 로직을 쓰는지에 따라 큰 시간적 효율차가 있을 것 같다.

주먹구구식으로 생각하면 속성을 모두 순회하는 for in의 cost가 매우 높을 것 같은데, 지금 배움의 깊이로 테스트를 해보기엔 부족하지 않을까? 싶어서 벤치마크 사이트(https://jsben.ch/BQhED)를 참고했다.

이 표가 의미하는 건 그러니까, 일반적인 경우에 for in을 쓰지말고 key만 따로 알아야할 때에 써라! 라는 것 같다.

그리고 의외로 기본 중의 기본(?) 인 for와 while이 1,2등을 다툰다.
개인적으론 제일 익숙한 친구들이라 반갑지만...
경우에 따라 다른 것을 쓸 수 있도록 훈련해야겠다고 생각했다.

profile
Define the undefined.

0개의 댓글