JavaScript 70

[ES6]for in / for of 반복문과 enumerable, iterable 속성

for in, for of 반복문을 알아봅시다. 그리고 함께 enumerable, iterable 이라는 속성도 알아봅시다. 반복문은 용도가 2개라고 보시면 됩니다. 1. 코드 단순 반복 2. 자료형에 담긴 자료들을 하나씩 꺼내고 싶을 때 사용합니다. 그 중 for in 반복문을 먼저 알아봅시다. for in 반복문은 Object에 사용합니다 Object 자료형에 저장된 자료들을 하나씩 꺼내고 싶을 때 사용합니다. 이렇게 사용합니다. (key라는건 변수명입니다. 여러분이 마음대로 작명하시면 됩니다.) 그럼 반복문은 오브젝트라는 자료 내부 데이터 갯수만큼 반복하게 되며 반복할 때마다 key라는 변수는 name, age 이렇게 데이터의 key값이 됩니다. 그럼 반복시마다 변경되는 key 값을 이용하면 오브젝..

JavaScript/ES6 2022.08.30

[ES6]Promise 어려워서 싫으면 async/await을 사용합시다

Promise가 어렵다면 그보다 훨씬 쉽게 쓸 수 있는 ES8 문법이 있습니다. async, await이라는 키워드인데 각각 Promise와 then을 매우 쉽게 만들어주는 문법입니다. 같이 알아봅시다. async 키워드를 쓰면 Promise 오브젝트가 절로 생성됩니다. 말그대로입니다. new Promise() 어쩌구 하실 필요가 없습니다. 근데 이 키워드는 function 선언 앞에만 붙일 수 있습니다. 그럼 이 함수 자체가 Promise가 되어버립니다. 그래서 이 함수를 실행할 때 뒤에 then을 붙일 수 있습니다. Promise니까요. (함수를 실행하면 그 자리에 Promise 인스턴스 (new Promise() 로 만든 오브젝트)가 남습니다. ) 그럼 이제 Promise 만들 때 했던거 처럼 th..

JavaScript/ES6 2022.08.30

[ES6]Promise 예제

Q1. 이미지 로딩 성공시 특정 코드를 실행하고 싶습니다. HTML 안에 있는 이미지 로딩이 끝나면 무언가 코드를 실행하고 싶습니다. 이 이미지가 로드가 되면 콘솔창에 성공, 로드가 실패하면 콘솔창에 실패를 출력하고 싶은데 Promise 문법의 then, catch 함수를 사용해 만들고 싶습니다. 어떻게 코드를 짜면 될까요? (참고) 이미지 로딩이 끝났다는 것은 에 load라는 이벤트리스너를 붙여서 체크가 가능합니다. (참고) 이미지 로딩이 실패했다는 것은 에 error라는 이벤트리스너를 붙여서 체크가 가능합니다. id가 test인 가 로딩이 되었는지 / 로딩 실패했는지 판단하려면 이렇게 하면 됩니다. 별거아닙니다. 그럼 이걸 Promise를 이용해서 로딩성공시 .then() 실패시 .catch()를 실..

JavaScript/ES6 2022.08.30

[ES6]인간의 언어로 설명하는 Promise

콜백함수 디자인패턴이 마음에 안드는 분들은 Promise 디자인패턴을 사용하시면 됩니다. 이건 자바스크립트의 새로운 기능이라기보다는 코드/함수 디자인 패턴일 뿐입니다. Promise 생김새 맛보기 이것이 끝입니다. new Promise()문법으로 프로미스라는 변수 오브젝트를 하나 생성하시면 Promise 제작 끝입니다. 그럼 이제 프로미스라는 변수에다가 then()을 붙여서 실행가능합니다. 프로미스 안의 코드가 실행이 완료가 되었을 때 then()함수 내의 코드를 실행시켜줍니다. 코드가 실행이 실패했을 경우엔 catch() 함수 내의 코드를 실행시켜줍니다. (지금은 프로미스 안에 코드가 암것도 없지만요) 이런식으로 코드를 차례로 실행할 수 있게 도와주는 디자인 패턴이 바로 Promise입니다. Promi..

JavaScript/ES6 2022.08.30

[ES6]동기/비동기처리와 콜백함수란?

자바스크립트는 항상 동기식 처리 (synchronous) 동기식 처리가 뭐냐면 한번에 코드 한줄씩 차례차례 실행된다는 소리입니다. 자바스크립트를 실행하는 웹브라우저는 stack이라는 코드 실행 공간이 있는데 거기서 코드를 한줄한줄 차례로 실행합니다. 그럼 하단 코드는 어떤 순서대로 출력될까요? 예상하신 대로 1,2,3이 차례로 출력됩니다. 왜냐면 자바스크립트는 한번에 코드 한줄씩 차례차례 실행하니까요. 이걸 전문용어로 동기적이다~ (synchronous) 라고 합니다. 그냥 거의 대부분의 프로그래밍 언어들은 이런 특징을 가지고 있습니다. 비동기처리 (asynchronous)라는 것도 가능합니다 특정 코드를 1초 후에 실행하고 싶으면 어떻게하죠? 일반적인 프로그래밍 언어에서 이런 코드를 작성하려면.......

JavaScript/ES6 2022.08.30

[ES6]import / export

자바스크립트 코드가 길어지면 다른 파일로 쪼개는게 좋은 관습입니다. 다른 파일로 쪼개놓고 그걸 첨부해서 사용하는 방법을 알아보도록 합시다. ES6 import/export를 쓰시면 내가 원하는 변수, 함수, class만 다른 파일로 보낼 수 있습니다. 어떻게 하는지 알아봅시다. (참고) import 해온 변수, 함수는 사용은 가능하지만 수정은 불가능합니다. read-only 입니다. 파일 두개를 만들어 봅시다. 저는 index.html과 library.js를 만들어서 library.js 파일에 있는 내용을 index.html 이걸 쓰도록 합시다. 이것이 원조 import 문법 아니겠습니까. 혹은 모던 브라우저에선 이렇게 하면 import export 문법이 사용가능해지는데 대부분은 리액트 뷰 nodejs..

JavaScript/ES6 2022.08.30

[ES6]Destructuring(구조분해)

Array, Object 자료형에 있는 중요한 자료들을 변수로 꺼내고 싶으면 어떻게 합니까. 한두개면 모르겠는데 여러개의 자료를 뽑아서 변수 만들려면 코드가 매우 길어지겠죠? 그럴 때 destructuring 문법을 사용하면 변수를 쉽게 만들 수 있습니다. Array 안에 있는 데이터를 변수에 담는 방법 [2,3,4]라는 array가 있는데, 여기안에 있는 3개의 데이터들을 전부 밖으로 꺼내서 변수에 담고 싶으면 어떻게 합니까. 뭐 이런식 아닐까요? 근데 더 쉽게할 수 있는 방법이 있습니다. [2,3,4]라는 자료랑 비슷한 모양으로 변수를 선언해주시면 됩니다. 변수 이름은 아무렇게나 해주시면 되고요. 그럼 a,b,c 변수가 세개 생성되는데 각각 2,3,4라는 자료를 가집니다. array에서 데이터 끄집어..

JavaScript/ES6 2022.08.30

[ES6] class,extends,getter,setter 연습문제

1. 직접 class 구조 만들어보기 갑자기 강아지 SNS를 만들고 싶어서 자바스크립트로 열심히 코딩하던 중, 여러 강아지 정보들을 담은 유사한 오브젝트 자료형을 테스트삼아 몇개 만들려고 합니다. 이렇게 쭉 많이 만들고 싶은데 하드코딩하기 싫어서 class를 만들어 강아지 오브젝트들을 뽑고 싶습니다. 그럼 class를 어떻게 만드는게 좋을까요? 그럼 이제 Dog 이라는 class로 부터 새로운 강아지 오브젝트들을 쉽게 뽑아낼 수 있겠군요. 2. 이번엔 고양이관련 object들을 만들고 싶습니다. 이번엔 class를 이용해 고양이 오브젝트 여러개를 뽑고 싶습니다. type, color는 이전에 만든 강아지 object와 유사한데 고양이들만 특별하게 age라는 속성을 하나 더 추가하고 싶습니다. 어떻게 cl..

JavaScript/ES6 2022.08.25

[ES6]getter, setter

많은 분들이 왜 쓰는지 궁금해하는 자바스크립트 getter, setter 문법을 알아봅시다. 얕게 말하자면 오브젝트 내의 함수들을 괄호없이 쓸 수 있게 만들어주는 키워드인데 깊숙히 들어가면 데이터의 무결성을 보존하기 위해 쓰는 키워드라고 보시면 됩니다. 요즘 원본 데이터는 immutable 해야한다 이런말 들어보셨습니까. 데이터를 수정하거나 출력할 때 직접 원본 데이터를 만지는게 아니라 함수로 간접적으로 다루는게 대세를 이루고 있는데 거기에 합치되는 일종의 코딩 테크닉이라고 보시면 됩니다. 이걸 이해하려면 일단 object 데이터를 다루는 방법론에 대해 알아야합니다. 함수로 object 데이터를 꺼내는 방법 object 데이터를 하나 만들어봅시다. 그 다음에 여러분의 내년 나이를 출력해보고 싶으면 어떻게..

JavaScript/ES6 2022.08.25

[OOP & ES6]class를 복사하는 extends / super

자바스크립트 객체지향 문법의 끝판왕인 extends를 배워보도록 합시다. 어렵진 않고 그냥 외울게 몇개 더 생기는 것일 뿐입니다. class를 상속한 class를 만들고 싶을 때 쓰는 extends 할아버지 class를 하나 만들었다고 칩시다. 할아버지 class는 성과 이름이라는 속성을 가지고 있습니다. 그럼 이제 new 할아버지() 뭐 이런식으로 하면 새로운 object를 쉽게 생성할 수 있겠죠? 그런데 이 class가 너무나도 유용한 나머지 이것과 유사한 class를 하나 더 만들고 싶습니다. 그러면 직접 class를 하나 더 만들어서 내용을 복붙하면 되겠죠? 하지만 class안에 복사할 내용이 너무나도 많으면 코드가 너무나도 길어집니다. 그래서 고대의 개발자들이 extends라는 문법을 만들었는데..

JavaScript/ES6 2022.08.25