220930_TIL
오늘 한 일
- for in / for of 반복문
- Symbol 자료형
- Map, Set 복습
반복문의 용도는
- 코드를 단순 반복할 때
- 자료형에 담긴 자료들을 하나씩 꺼내고 싶을 때 사용한다고 생각한다.
오늘 배운 for in 반복문은 Object 자료형에 저장된 자료들을 하나씩 꺼내고 싶을 때 사용한다.
let 오브젝트 = { name: 'Lee', age: 28 };
for (let key in 오브젝트) {
console.log(오브젝트[key]);
}
이렇게 하면 오브젝트 안의 갯수만큼 반복이 되면서 key라는 변수에 name과 age가 들어가서 Lee와 28이 출력이 된다. 변수명인 key는 자유롭게 작명하면 된다.
이런 for in 반복문의 특징은
- 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월이 벌써 끝이 났다. 초조해지지 않는 것이 중요하다고 생각한다. 지나간 과거는 이렇게 기록해나가면서 정리하고, 하루하루 주어지는 현재를 열심히 살아가다보면 미래는 밝을 것이고 내가 희망하는 곳에 취업을 자연스럽게 할 수 있을 것이라고 생각한다.
댓글남기기