[React] Virtual DOM

2022. 3. 12. 13:44·React/이론
반응형

1. DOM

DOM이란 문서 객체 모델(Document Object Model)로 HTML 문서나 XML 문서에 접근하기 위한 일종의 인터페이스다. 

여기서 말하는 문서 객체란, html, head, body, footer 같은 태그를 JavaScript에서 이용할 수 있는 객체를 의미한다. 

 

즉, DOM은 HTML과 스크립트언어(JavaScript)를 이어주는 역할을 하고 있다. 

 

2. Virtual DOM이 나온 이유 

만약 <a> 요소를 수정할 경우 DOM의 document.getElementById를 사용할 경우 아쉬운 점이 있다. 

 

1. 메모리 누수와 속도 

<a> 요소를 찾는 코드를 변수에 저장하지 않고 매번 document.getElementById를 사용한다면, 

각 단계마다 페이지의 모든 document를 훑으며 찾는 현상이 발생하고, 메모리 누수로 이어진다. 

 

또한 <a>에 변화가 발생하면 css와 다시 합쳐서 레이아웃을 구성해서 웹페이지를 나타내 시간이 든다. 

 

단순 <a> 요소 한번만 변경한다면 문제가 크지 않겠지만, 이러한 작업은 어떤 요소를 수정하더라도 발생한다.

 

2. 코드량 

객체를 찾기 위해 작성하는 코드가 번잡스러워질 수 있다. 

일반적으로 요소의 id는 고유성을 침해당하지 않기 위해 네이밍을 정할 때 심사숙고할 것이고, 접근하는 메서드가 

그렇게 짧지 않다. 

 

3. Virtual DOM ? 

실제 DOM에 접근하여 조작하는 대신, 추상화시킨 자바스크립트 객체(가벼운 복사본 개념)를 이용해서 사용한다. 

 

Virtual DOM 반영 절차 

1. 변화가 일어나면 현재 UI를 Virtual DOM으로 바꾼다. 

 

2. 변화된 UI를 Virtual DOM으로 변경하여 서로 비교한다. 

 

3. 실제 변경이 일어난 부분만 적용한다. 

 

작업 규모의 레이아웃 변경이 자주 발생하는 것보다 큰 규모의 레이아웃 변경이 한 번에 발생하는 것이 성능에 더 좋은 결과를 나타낸다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 이론' 카테고리의 다른 글

[React] MobX - 시작하기  (1) 2022.04.29
[React] import React from 'react'는 어디에 쓰일까?  (1) 2022.04.17
[React] 비동기 작업(콜백 함수, Promise, async, await)  (0) 2022.02.08
[React] ref란?  (0) 2022.02.08
[React] Hook  (0) 2022.02.08
'React/이론' 카테고리의 다른 글
  • [React] MobX - 시작하기
  • [React] import React from 'react'는 어디에 쓰일까?
  • [React] 비동기 작업(콜백 함수, Promise, async, await)
  • [React] ref란?
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    프로그래머스
    알고리즘
    webpack
    ChatGPT
    typescript
    바질 키우기
    react
    덤프
    redux
    Babel
    next.js
    네트워크
    자바스크립트
    Node.js
    리얼클래스
    ReactNative
    타입스크립트
    바질
    리얼학습일기
    식물
    리액트
    영어회화
    Docker
    다이소
    영어독학
    타일러영어
    네이버 부스트캠프
    CCNA
    CSS
    javascript
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] Virtual DOM
상단으로

티스토리툴바