Post

DOM과 BOM

무엇을 먼저 해야할까

이전 글에서도 말했듯이 당장 어떤 것 부터 공부해야할 지 찾아보다가 https://www.zerocho.com/lecture를 참고하여 Excution Context 부터 공부를 하려고 했지만..?

1
console.log(window.v0, window.n0, window.l0, window.c0);

평소에는 아무 생각없이 위 코드 처럼 document 및 window 객체를 이용했지만 이제부터라도 어느정도의 개념은 알고 사용하려고 하기에 이 개념부터 우선으로 공부해보려고 한다.

처음부터 정확한 길을 모르기 때문에 앞으로도 이러한 진행이 많을거 같다. 하지만 계속 강조하겠지만 나는 처음부터 모든 것을 공부하고 개발하지 않을 것이다.


window

Browser-Structure

자바스크립트의 최상위 객체 / 전역 객체 / 모든 객체가 소속된 객체

나는 사실 브라우저의 구조가 곧 DOM인 줄 알았는데 최상위에 window 객체가 존재했다.

window는 브라우저 창을 의미하며 역할은 아래와 같다.

1. First, it is a global object for JavaScript code.
2. Second, it represents the “browser window” and provides methods to control it.

말 그대로 브라우저의 전역 객체로써 창을 제어하는 기능들을 제공하고,
직접 전역 변수나 전역 함수를 선언해 window 객체의 프로퍼티로써 이용이 가능하다.(하지만 이 방법은 권장하지 않는다.)

1
2
3
window.innerHeight // window's property
window.myvar       // user-defined property
window.myfunc()    // user-defined property

DOM(Document Object Model)

HTML, XML 문서 등을 브라우저가 이해할 수 있도록 트리 구조로 표현하고, 문서 요소에 접근하고 조작하는 방법을 정의

웹 페이지와 관련된 인터페이스를 제공하여 웹 페이지의 구조, 콘텐츠, 스타일 등을 조작할 수 있게 해준다.

대표적인 DOM의 객체로 document가 있으며 아래는 DOM의 사용예시이다.

1
2
const textElem = document.getElementById('text');
textElem.style.background = 'red';

BOM(Browser Object Model)

웹 브라우저와 관련된 인터페이스를 제공

즉 웹 브라우저의 창, 히스토리, 위치 등을 다룰 수 있게 해준다.

대표적인 BOM 객체로는 window, navigator,location, screen, history 등이 있으며 간단한 설명은 아래와 같다.

객체역할
window브라우저 창의 크기를 조절하거나, 새로운 창을 열고 닫는 등의 작업을 수행
navigator사용자의 브라우저와 관련된 정보
location브라우저의 url에 대한 정보
screen사용자의 화면과 관련된 정보를 제공
history브라우저의 세션 히스토리를 다룸

아래는 BOM의 사용예시이다.

1
2
3
4
5
6
7
window.open('www.google.co.kr'); //새로운 창 열기
console.log(navigator.userAgent); // 사용자의 브라우저 정보
location.href = 'www.google.co.kr'; // google로 이동
console.log(screen.width); // 화면의 크기
history.back(); // 뒤로가기



마무리

정리하자면 DOM은 웹 페이지의 구조와 콘텐츠를 표현하는 API 집합이며, BOM은 웹 브라우저와 관련된 기능을 제공하는 API 집합이다.

결국 DOM과 BOM에서 제공하는 API를 이용해 JS로 브라우저의 요소를 동적으로 조작한다고 볼 수 있다.

완벽하진 않아도 개념에 대해선 어느정도 이해를 했으니 다음 포스팅에선 본격적으로 Excution Context에 대해서 작성해보겠다.

참고

https://javascript.info/browser-environment
https://yeji-power.tistory.com/36
https://enjoydev.life/blog/frontend/1-dom

This post is licensed under CC BY 4.0 by the author.