728x90
📍 11일 차 11.9. 화. (실시간 강의)
오늘은 오랜만에 비가 내려서 새벽 러닝을 하지 못했고 날씨도 급격하게 추워졌다. 벌써 11월이라니.. 2021년 올해도 벌써 1달 조금 넘게밖에 남지 않았다. 내년 2월까지 최선을 다하자..! 저번 시간에 JS I
을 통해 자기소개 홈페이지를 만들었고, 이번주는 진도를 더 나가서 JS II
를 배우게된다. DOM
, Event
, this
, closure
등에 대해서 배우는데 이번 주차는 어려운 파트기 때문에 복습을 더 열심히 해야겠다는 생각을 했다.
❏ 저번주 복습
indexOf(target)
:target
이index
몇 번째에 위치해있는지 반환하는 메서드(없으면-1
반환)- 함수에
return
값이 없으면js
엔진이undefined
를 리턴한다. (여담으로JS
엔진이undefined
를 반환하는 경우는 3가지가 있는데변수에 값을 할당하지 않은 경우
,객체 프로퍼티에 값이 없는 경우
,함수에 리턴값이 없는 경우
이다.)
❏ 브라우저의 렌더링 과정
- 브라우저는
HTML
,CSS
,JS
,img
,font
등 렌더링에 필요한 리소스를 요청하고, 서버로부터 응답을 받는다. - 브라우저의 렌더링 엔진은 서버로부터 응답된
HTML
,CSS
를 파싱하여DOM
과CSSOM
을 생성하고 이들을 결합하여 렌더 트리를 생성한다. - 브라우저의
JS
엔진은 서버로부터 응답된JS
를 파싱하여AST(Abstract Syntax Tree)
를 생성하고, 바이트코드로 변환하여 실행한다. 이때JS
는DOM API
를 통해DOM
이나CSSOM
을 변경할 수 있다. 변경된DOM
과CSSOM
은 다시 렌더트리로 결합된다. - 렌더 트리를 기반으로
HTML
요소의 레이아웃(위치와 크기)을 계산하고(리플로우), 브라우저 화면에HTML
요소를 페인팅한다.(리페인팅)
❏ DOM을 파싱하는 과정
- 위
브라우저의 렌더링 과정
에서2
번 과정을 조금 더 자세하게 설명하자면 브라우저의 요청에 의해 서버가 응답한HTML
코드만으로는 브라우저가 이해할 수 없다. 따라서 일련의 과정을 거쳐 브라우저가 이해할 수 있도록 바꿔줘야 하는데바이트
->문자
->토큰
->노드
->DOM
의 과정을 거친다. 바이트(byte)
:HTML
파일이 브라우저 요청에 의해 응답되는데, 서버는 브라우저가 요청한HTML
파일을 읽어 들여 메모리에 저장한 다음, 메모리에 저장된 바이트(2진수)를 인터넷을 경유하여 응답한다.문자
: 2진수 형태의HTML
문서는<meta charset="UTF-8">
코드에 의해 문자열로 변환된다.토큰(token)
: 문자열로 변환된HTML
문서를 읽어 문법적 의미를 갖는 코드의 최소 단위인토큰(token)
으로 분해한다.노드(node)
: 각 토큰들을 객체로 변환하여node
를 생성한다. 토큰의 내용에 따라문서 노드
,요소 노드
,어트리뷰트 노드
,텍스트 노드
가 생성된다. 노드는 이후DOM
을 구성하는 기본 요소가 된다.DOM
:HTML
요소는 중첩 관계를 갖는데, 이러한HTML
요소간의 부자관계를 반영하여 모든 노드들을트리 자료구조
로 구성한다. 이 노드들로 구성된 트리 자료구조를DOM(Document Object Model)
이라 부른다. 즉,DOM
은HTML
문서를 파싱 한 결과물이다. 이DOM
형태가 되어야js
언어로 객체 형태에 접근이 가능하다.
728x90
❏ DOM(Document Object Model)
HTML
문서의 계층적 구조와 정보를 표현하며 이를 제어할 수 있는API
, 즉 프로퍼티와 메소드를 제공하는 트리 자료구조다.HTML element
:HTML 요소
는HTML
문서를 구성하는 개별적인 요소를 의미한다. 예를 들어<div class="greeting">Hello</div>
와 같은 코드에서class
는 어트리뷰트 값(attribute value)이고 어트리뷰트 노드로 변환된다.Hello
는 콘텐츠(contents)를 뜻하며 텍스트 콘텐츠는 텍스트 노드로 변환된다.
❏ 요소 노드 취득
HTML
요소 노드를 가져오고 싶을 땐 다음의 4가지 방법을 이용하자.Document.prototype.getElementById("id")
: 인수로 전달한id
어트리뷰트 값을 갖는 하나의 요소 노드를 탐색하여 반환한다. 이때 문서 노드인document
를 통해 호출하자.class
어트리뷰트와는 달리 동일한id
태그 여러개가 겹쳐도 제일 처음의 노드 1개만 반환한다.Document.prototype.getElementsByTagName("Tag")
: 인수로 전달한 태그 이름을 갖는 모든 요소 노드들을 탐색하여 반환한다. 이때 여러 개의 요소 노드 객체를 갖는HTMLCollection
객체를 반환한다.HTMLCollection
은 유사배열개체이며, 이 터러블 하다.Document.prototype.getElementsByClassName("class")
: 인수로 전달한class
어트리뷰트 값을 갖는 모든 요소 노드들을 탐색하여 반환한다.getElementsByTagName
메서드와 마찬가지로HTMLCollection
객체를 반환한다.Document.prototype.querySelector
: 인수로 전달한CSS
선택자를 만족시키는 하나의 요소 노드를 탐색하여 반환한다.Document.prototype.querySelectorAll
: 인수로 전달한CSS
선택자를 만족시키는 모든 요소 노드를 탐색하여 반환한다.getElement
메서드와는 다르게NodeList
객체를 반환하는데 유사 배열 개체이며, 이 터러블 하다.CSS 선택자 문법
을 사용하는querySelector
,querySelectorAll
메서드는getElementsBy*~
보다 다소 느리지만CSS
선택자 문법을 사용하여 좀 더 구체적인 조건으로 요소 노드를 취득할 수 있고, 일관된 방식으로 요소 노드를 취득할 수 있는 장점이 있다. 따라서id
어트리뷰트가 있는 요소 노드를 취득할 때는getElementById
메서드를 사용하고 그 외의 경우querySelector
,querySelectorAll
메서드 사용을 권장한다.- 앞서
4
번과7
번에서 등장한HTMLCollection
와NodeList
의 차이점은 다음에 알아보자.
❏ 자식 노드 탐색
Node.prototype.childNodes
: 자식 노드를 모두 탐색하여NodeList
에 담아 반환한다.childNodes
프로퍼티가 반환한NodeList
에는 요소 노드뿐 아니라 텍스트 노드도 포함되어 있다.Element.prototype.children
: 자식 노드 중 요소 노드만 탐색하여HTMLCollection
에 담아 반환한다. 텍스트 노드가 포함되지 않는다.
❏ event
- event는 내일 이론 강의 수강 이후 작성하겠다.
reference
반응형
'Frontend > 엘리스 SW 엔지니어 트랙' 카테고리의 다른 글
[ 엘리스 SW 엔지니어 트랙 ] 13일차 (0) | 2021.11.11 |
---|---|
[ 엘리스 SW 엔지니어 트랙 ] 12일차 (0) | 2021.11.10 |
[ 엘리스 SW 엔지니어 트랙 ] 10일차 (0) | 2021.11.06 |
[ 엘리스 SW 엔지니어 트랙 ] 9일차 (0) | 2021.11.05 |
[ 엘리스 SW 엔지니어 트랙 ] 8일차 (0) | 2021.11.04 |
댓글