[JS] 반복문 종류 총 정리

AREUM·2022년 12월 24일
2

Javascript이론

목록 보기
5/10
post-thumbnail

내가 알아보고 공부한 반복문들의 종류들을 적어보도록 하겠다.

대부분 for문은 배열과 한 쌍이다.
비동기적인 방법을 사용해 api의 정보들을 json 형식으로 가져와 반복문으로 배열들의 요소에 접근, 순회, 호출을 해오기 때문에 그 값을 화면에 보여지게 만드는 것이다.

for문

가장 기본적인 방법이다.

const arr = ['하나', 2, 'Three', 4, 5, true];
for (let i = 0; i < arr.length; i++) {
 	console.log( `${i} : ${arr[i]}` ); 
}
  1. for문반복횟수를 명확히 알고 있을때 주로 사용한다.
  2. 실행속도가 중요한 부분이면 for문이 사용된다. ( 가장 빠르다. )
  3. ES5에 forEach 메소드가 추가되고 ES2015에 for..of구문이 추가된 후에는 잘 사용되지 않는다고 한다.
  4. 🌟🌟🌟 인덱스에만 접근을 한다 했을 때 사용한다고 한다.

❗️주의 해야 할 점❗️
변수 선언 시 const를 사용하면 값을 변경할 수 없으므로, 에러가 발생하게 된다.

while문

for문은 배열에 많이 사용되지만,
🌟🌟🌟 while문조건에 따라 반복횟수를 결정해야할때 주로 사용된다.
멈출 수 있는 무한반복문을 사용하는 경우에 조건이 true일 때 반복문이 실행된다.
( 무한 루프나 특정 조건에 만족할 때까지 반복해야하는 경우 )

for .. in문

객체( Object )의 프로퍼티 키 열거 전용

const obj = {
	name: 'eille',
  	age: 30
}

for (const key in obj) {
	// 반복 실행 코드 ...
  	console.log( `${key} : ${obj[key]}` )
  	// name : eille 
  	// age : 30
}
  1. 순서가 딱히 중요하지 않는 배열이나 객체를 반복, 순회하는데에 사용됩니다.
  2. 객체의 속성을 확인 할 수 있다는 특징을 가지고 있다.
  3. 디버깅에 도움이 된다.

❗️ 주의할 점 ❗️
정상적으로 실행되지만, 배열은 for..in문에 사용할 경우 두가지 주의사항이 있다.
1. 배열에 반복문을 사용하는 경우
( for..in문for..of문 보다 처리속도가 훨씬 느리다 )
2. 배열의 요소에 일관성 없는 데이터가 존재하는 경우

🌟 객체의 프로퍼티의 key, value에 접근 한다고 한다면,
for..in 보다는 Object.keys(), Object.value(), Object.entries()를 사용하는 것이 좋을거 같다.

for .. of문

iterable( 이터러블 ) 순회 전용

  1. 🌟🌟🌟 배열의 value값에 접근할 때 사용된다.
  2. for..of문은 본문에서 continue, break, yield 제어흐름을 사용 가능하다
  3. for..of문은 외부에 선언된 변수의 값을 덮어씐다.
    덮어씌기를 원치 않는다면 for..of문 내부에 사용되는 변수의 키워드를 let으로 선언해야한다.

for..of문의 기본 문법이다.

const arr = [10, 20, 30];
for ( const item of arr ) {
	console.log(item)	// 10, 20, 30 출력된다.
}

iterable 이라는 단어가 생소 하다.
참고문서1, 참고문서2를 확인 했고, 이부분은 따로 공부하고 정리하면서 올려보도록 해야겠다.

반복 가능한 객체 목록 ( Object 해당 ❌ )

  • 배열
  • 문자열
  • Set 객체와 Map 객체
  • NodeList

( ❗️ 반복적이지 않는 요소가 for..of 문을 사용할 경우 TypeError 발생 ❗️ )

: iterable은 반복 가능이라는 뜻을 가지고 있다.
/* iterable 패턴 */ 이라는 것이 있는데 찾아보니 구현방법은 노출이 되지 않고,
하나의 집합체안에 들어있는 모든 항목에 접근할 수 있게 해 주는 방법을 제공해 주는 패턴이라고 한다.
집합체내에서 어떻게 처리되는지는 몰라도 그 안에 들어있는 항목들에 대해 반복적으로 작업할 수 있는 것이라고 한다.
class기반 인거 같고 **프로토타입**을 집중공약으로 공부해봐야 겠다.
Generator 함수 `yield`를 이용한 표현식을 이용해 반복적인 객체를 만들어서 **모듈화**하고 비동기 작업을 할 때도 유용한 것 같다.

갑자기 생각이 났는데,
전에 프로젝트를 하다가 indexvalue의 접근하려고 for..of를 사용했던 적이 있는데, iterable 관련 TypeError에러가 발생했었다.
그래서 forEachfor를 사용하는 방법을 찾아서 해결하였다.

그 때는 알지 못했지만 지금 추가적으로 알게 된 점 으로, 만약 for..of문으로 배열 인덱스를 사용하는 방법을 굳이 굳이 찾자면 있지 않을까 ? 해서 구글링을 해보았다.
그 방법을 알게되었다.
예제로 한번 보자.

const arr = ['하나', 2, 'Three', 4, 5, true];

/* keys */
const keyArr = arr.keys();
for(const k of keyArr) {
	console.log(`[${k}] = ${keyArr[k]}`);
}

/* entries */
const entriesArr = arr.entries();
for(const [index, e] of entriesArr) {
	console.log(`[${index}] = ${e}`); 
}

배열key, value에 접근이 가능한 메소드를 알게 되었다.
Array.prototype.keys() Array.prototype.entries()를 활용하는 방법이다.

👉🏻 이터레이터를 반환하는 두 메소드를 통해 for..of에서도 간접적으로 index를 사용할 수 있다.

그냥 궁금증이 있어서 알아보았고, 그냥 for문, forEach()를 사용하자.

forEach

forEach의 문법은 이렇다. 메소드 형식으로 사용된다.

array.forEach( callback ( currentElement, index, array ) { } );

최대 3개의 인수를 가지는 콜백함수가 존재한다.
: 배열을 순회하면서 배열의 인덱스가 필요한 경우에 사용된다.

매개변수

  • currentElement: 현재 배열의 요소
  • index: 현재 배열 요소의 인덱스
  • array: 반복되는 배열(forEach문을 호출한 배열)
const arr = ['하나', 2, 'Three', 4, 5, true];

arr.forEach(function(item){
	arrCopy.push(item);
});

❗️forEach 특징❗️

🌟🌟🌟 함수를 넘겨서 사용할 때 forEach가 사용된다.

  1. forEach문인덱스를 접근할 수 있는 방법이 존재한다.
  2. 또 다른 차이점은 forEach문 첫 번째 인수인 현재 배열의 요소는 로컬 범위(Local Scope)이다.
  3. 외부와 내부에 선언된 값은 저장소가 다르다.
  4. forEach문 외부에서 선언된 변수의 값은 변경되지 않는다.

이해가 어렵다면 for..of의 특징과 비교하면 이해가 된다.

💡 총 정리 💡

속도는 빠른순으로 for 👉🏻 forEach 👉🏻 for of 순이다.
블로그를 보면 이렇게 속도가 나오는 예시를 볼 수 있다.

  1. for 👉🏻 인덱스에만 접근을 한다 했을 때 사용
  2. while 👉🏻 조건에 따라 반복횟수를 결정 해야할 때
  3. for..in 👉🏻 객체( Object ) 의 key접근
  4. for..of 👉🏻 value에 접근 ( 각 요소 반복, String에서도 가능 )
    4-1. Array.entries()와 같이 사용 👉🏻 index, value을 받을 때
  5. forEach 👉🏻 함수 넘겨서 사용할 때

  • 배열의 경우 for..of문 또는 forEach문을 사용합니다.
  • 객체의 경우 for..in문 또는 🌟Object.메소드 사용🌟
  • 배열을 반복문으로 순회하여 값과 인덱스에 접근해야 하는 경우 for 또는 forEach문을 사용

오늘은 반복문의 종류를 정리하면서,
이 반복문들을 자주 사용하게 되는 상황( 배열순회 )에 대해서도 공부가 되면서 정리가 된거 같다.

다음 블로그에는 배열에 사용되는 메소드들을 정리해 봐야겠다.

profile
어깨빵으로 부딪혀보는 개발끄적이는 양씨 인간

0개의 댓글

관련 채용 정보