내일배움캠프[4기_Reac트랙]/TIL
내일배움캠프 React트랙 24일차 회고 (2022.12.01)-DOM
ecoEarth
2022. 12. 2. 00:44
다양한 객체를 특별한 구조에 담아둘 수 있다. 즉, 객체의 집합체를 나타내는 것이 자료구조이다.
자료구조종류로는 Array, Queue, Stack, Hash Table, Linked List, Tree, Graph등이 있다.
얕은복사(Shallow Copy)
얕은 복사의 경우 객체를 온전히 받아오는 것이 아니라 참조된 값, 즉 객체의 메모리 주소를 복사하여 같은 객체를 참조한다.
고차함수(Higher-order function)
함수를 인자로 받는 함수(콜백함수), 함수를 반환(출력)하는 함수를 고차함수라 한다.
함수형프로그래밍, 순수함수, 불변성 -> side effect가 없도록
DOM(Document Object Modeling)
자바스크립트는 HTML과 CSS를 웹페이지상에서 동적으로 만들어주는 주체이다. 이때 HTML 파일에 접근하기위해서는 자바스크립트가 접근할 수 있는 파일 -> 객체로 변해야하기때문에 자바스크립트가 읽을 수 있도록 Parsing과정을 거쳐 생성된 객체가 바로 돔이다.
마치 한글파일확장자를 워드에서 읽을 수 있도록 확장자를 변경해주는 것과 같은 이치이다.
웹브라우저의 랜딩process
- 웹 페이지 로딩 과정
- 홈페이지 접속(클라이언트가 서버에게 요청)
- HTML 문서를 수신(서버가 클라이언트에 응답)
- 브라우저가 HTML 파일을 해석 후 객체화(parsing)
- 돔 생성
접근 및 제어
모든 node마다 속성과 메서드를 보유한 DOM의 특성을 이용해 접근
- document 최상단노드에 접근
- parentNode 주체가 되는 노드의 상위태그에 접근
- childNodes 주체가 되는 노드에 속한 하위태그에 접근
document.childNodes[1].childNodes[2]
이런식으로 가지를 치듯이 하위 노드에 접근할 수도 있지만 복잡하므로 let body = document.childNodes[1].childNodes[2]와 같이 변수로 할당할 수도 있다. 이 상태에서 다시 body.childNodes[0]로 접근하는 것도 가능하다. - 하위태그는 여러개가 될 수 있지만 상위태그는 무조건 한 개이므로 parentNode와 childNodes는 단수/복수의 차이가 존재한다. 이런 이유로 childNodes를 지칭할 때는 [index]가 필요하다.
- getElementById(''), getElementsByClassName(''), getElementByTagName(''), querySelector(''), querySelectorAll('') 특정 요소에 접근
- class 특성을 공유하는 군집
- id 단일 요소만을 가리키는 고유 식별자
- 이러한 특성 차이로 요소를 가져올 때 Element에서 단수/복수의 차이가 존재한다. 그래서 getElementsByClassName('')은 [index]가 필요하다.
생성
- append
- createElement('')
변경
- innerHTML
html 요소 자동 변환
기존의 h1 태그 안에 하위 태그로 h2 생성document.querySelector('h1').innerHTML = '<h2>배고프다</h2>'
- innerText
텍스트로 인식응용결과: <p>This is a paragraph</p> const para = document.createElement("p"); para.innerText = "This is a paragraph"; document.body.appendChild(para)
-
h1 태그에서 h2로 변경document.querySelector('h1').innerText = '<h2>배고프다</h2>'
단, <h2></h2> 역시 텍스트로 인식하므로 배고프다만 입력해야 한다.
- style.속성
스타일 변경
- setAttribute('속성', '값')
기존의 Node에값을 포함하는 속성 추가
<h1>태그에 새로운 속성이 추가된 <h1 class="title">로 변경document.querySelector('h1').setAttribute('class', 'title')
- write('내용')
모든 내용물을 내용으로 변경하므로 사용을 권장하지 않음
- addEventListener('action', function)
action 행동을 취하면 function을 실행. 주로 클릭 이벤트에서 사용
함수와 메서드의 차이
간단하게 요약하자면 함수중에서도 객체내에 작성된 함수를 메서드라 한다.
- 함수
단독 호출 가능 ex) getAge();- 메서드
호출 주체 필요 ex) person.getAge();
런타임 환경
자바스크립트와 Node.js는 모두 동일한 언어를 사용하지만 자바스크립트에서는 동작하는 문법이 Node.js에서는 동작하지 않을 수 있다. 환경이 다르기 때문인데, 이 환경을 런타임 환경이라고 한다.