2 분 소요

오늘 한 일

  • for in / for of 반복문
  • Symbol 자료형
  • Map, Set 복습

반복문의 용도는

  1. 코드를 단순 반복할 때
  2. 자료형에 담긴 자료들을 하나씩 꺼내고 싶을 때 사용한다고 생각한다.

오늘 배운 for in 반복문은 Object 자료형에 저장된 자료들을 하나씩 꺼내고 싶을 때 사용한다.

let 오브젝트 = { name: 'Lee', age: 28 };

for (let key in 오브젝트) {
  console.log(오브젝트[key]);
}

이렇게 하면 오브젝트 안의 갯수만큼 반복이 되면서 key라는 변수에 name과 age가 들어가서 Lee와 28이 출력이 된다. 변수명인 key는 자유롭게 작명하면 된다.

이런 for in 반복문의 특징은

  1. enumerable한 것만 출력해준다. 오브젝트 자료형은 저장할 때 보이지 않는 값들을 저장하는데 아래와 같은 코드를 입력하면 확인해 볼 수 있다.
let 오브젝트 = { name: 'Lee', age: 28 };

console.log(Object.getOwnPropertyDescriptor(오브젝트, 'name'));

이렇게 입력하면 콘솔 창에 아래와 같은 코드가 출력된다.

{value: "Lee", writable: true, enumerable: true, configurable: true}

이 코드들이 Lee와 함께 몰래 저장되는 속성들이다. (그래서 Object 자료형이 좀 무거움) 여기서 enumerable이라는게 있는데, 이게 true인 자료들만 for in 반복문이 출력할 수 있다. 이걸 강제로 false로 만들면 for in 반복문이 거르긴 하는데 아무튼 이런 동작원리를 가진게 바로 for in 반복문이다.

  • enumerable을 번역하면 ‘셀수있는’ 이라는 뜻임

for in 반복문의 두 번째 특징은 부모의 prototype에 저장된 것도 출력해준다는 것이다.

class 부모 {}
부모.prototype.name = 'Park';

var 오브젝트 = new 부모();

for (var key in 오브젝트) {
  console.log(오브젝트[key]);
}

부모의 prototype에 저장된 Park이 오브젝트에서 출력하면 같이 나온다. 부모의 prototype 값이 나오는게 싫다면 아래 코드처럼 if문을 이용하면 가능하다.

class 부모 {}
부모.prototype.name = 'Park';

var 오브젝트 = new 부모();

for (var key in 오브젝트) {
  if (오브젝트.hasOwnProperty(key)) {
    console.log(오브젝트[key]);
  }
}

오브젝트.hasOwnProperty()라는 함수는 오브젝트가 이 key값을 직접 가지고 있냐라고 물어보는 함수인데 갖고 있으면 true, 없으면 false를 나타낸다. 그래서 내가 가진 것만 반복시키고 싶으면 이걸 써야한다.


for of 반복문

let array = [2, 3, 4, 5];
for (let 자료 of array) {
  console.log(자료);
}

for of 반복문은 for in 반복문과 매우 유사하다. 그러나 for of 반복문은 array 자료형 뿐만 아니라 array, 문자, arguments, NodeList, Map, Set 이라는 자료형에 적용할 수 있는 반복문이다. 근데 정확히 말하면 iterable인 자료형들에만 적용가능한 반복문이다.

iterable한 자료형이 뭐냐면

[Symbol.iterator]() 이라는 일종의 메소드를 가지고 있는 자료형들을 말한다.

let array = [2, 3, 4, 5];
console.log(array[Symbol.iterator]());

이렇게 하면 array 자료형 뒤에 붙이면 뭔가 출력이 되는데 이걸 가지고 있어야지만 for of 반복문을 쓸 수 있구나 알면 된다.


느낀 점

9월이 벌써 끝이 났다. 초조해지지 않는 것이 중요하다고 생각한다. 지나간 과거는 이렇게 기록해나가면서 정리하고, 하루하루 주어지는 현재를 열심히 살아가다보면 미래는 밝을 것이고 내가 희망하는 곳에 취업을 자연스럽게 할 수 있을 것이라고 생각한다.

태그:

카테고리:

업데이트:

댓글남기기