본 포스팅 내용은 과거에 개인적으로 공부할때 정리했던 JavaScript의 내용을 복습의 목적으로 다시 정리하는 포스팅입니다.
JavaScript의 탄생과 발전
JavaScript는 1995년에 만들어졌고, Netscape 브라우저에서 당시에 다른 브라우저와 차별화를 두기 위한 기술로써 사용되었었다. 현대에 들어서는 장바구니 담기, 좋아요 클릭, instagram - javascript , 가상현실, VR 게임/앱, 드론 컨트롤, 로봇 컨트롤 등 다양한 분야에서 Javascript가 사용이 되고 있다.
JavaScript는 과거에 웹 브라우저에 종속되었던 특성에서 웹 브라우저와 독립적으로 사용이 가능해짐에 따라 React, NodeJS, ExpressJS 등 front-end와 back-end에서 모두 JavaScript 사용이 가능하게 되었다.
JavaScript를 이용해서 할 수 있는 브라우저상의 기본적인 작업들
페이지에 있는 HTML 요소들을 변경할 수 있다.
페이지에 있는 HTML의 속성들을 변경할 수 있다.
페이지에 있는 CSS 스타일들을 변경할 수 있다.
기존의 HTML 요소나 속성을 제거할 수 있다.
새로운 HTML 요소나 속성들을 추가할 수 있다.
자바스크립트는 페이지에 있는 기존의 HTML 이벤트와 상호작용할 수 있다.
자바스크립트는 페이지에서 새로운 HTML 이벤트들을 생성할 수 있다.
위의 브라우저의 조작은 DOM(Document Object Model)을 활용해서 가능하다.
// It is important to CACHE selectors in variables /** ※ 이렇게 페이지를 새로고침하기 전까지 h1 변수에 h1태그에 대한 querySelector를 지정해준 것을 저장해서 사용하는 것을 CACHE selector라고 한다. */ var h1 = document.querySelector('h1');
DOM EVENT
1 2 3 4 5
var button = document.getElementsByTagName('Button')[0];
button.addEventListener('mouseleave', function () { console.log('CLICK!!!!'); });
var button = document.getElementById('enter'); var input = document.getElementById('userinput'); var ul = document.querySelector('ul'); var li = document.querySelector('li'); var deletebtn = document.getElementsByClassName('delete');
// class="delete"인 버튼에 click 이벤트 set up for (var i = 0; i < deletebtn.length; i++) { deletebtn[i].addEventListener('click', removeParent, false); }
//toggles the .done class on and off li.addEventListener('click', toggleListItemClass);
//delete parent function functionremoveParent(evt) { evt.target.removeEventListener('click', removeParent, false); evt.target.parentNode.remove(); }
JQuery의 등장
DOM을 이용해서 화면의 구성요소를 조작할때에는 각 브라우저에서 호환이 되는지 확인을 해야했으며, querySelector를 지원하는 브라우저도 몇 안되었다. 이러한 호환문제와 DOM 객체를 이용한 웹 페이지 요소 조작을 간편하게 할 수 있도록 등장한 것이 바로 JQuery이다. 하지만 ES6 이후부터는 JavaScript가 많이 발전되어 JQuery를 사용하지 않는 추세이다. (JQuery는 간단하게 JQuery CDN을 추가하고, $sign을 이용해서 간단하게 화면 구성요소들을 호출해서 사용할 수 있다.)
JQuery는 매우 Imperative한 언어이다. 따라서 프로그램에 정확히 무엇을 해야하는지 하나 하나씩 알려야 한다. 하지만 프로그램이 커지면 다른 조치는 또 다른 조치로 종속되고, 오류와 버그가 많아지며 해결하기 위한 추적이 매우 힘들어진다. Imperative : 반드시 해야하는, 긴요한, 명령적인
Javascript를 대중화시키고 편리하게 사용하는데에 JQuery는 많은 것을 기여를 했지만, 점점 시스템은 커져가고 있고, 단순히 모든 것들을 절차지향 언어와 같이 하나 하나 알려줘야하는 프로그램이라면 나중에 운용보수면에서 보았을때 힘들 것이라고 생각한다.
개발자의 입장에서 본 DOM 조작
DOM 조작의 양을 최소화하는 것이 좋다. 이 것은 곧 웹 페이지의 퍼포먼스로 직결되는 문제이며, 페이지에서의 일부변경이 전체 페이지의 렌더링되어버리면 매우 효율이 떨어지는 어플리케이션이 될 것이다. 웹 응용 프로그램을 구축할 때 매우 중요한 개념이며 똑똑하고 최상의 방법은 필요한 부분만 re-painting하는 것이다.
JavaScript Engine
각 브라우저는 JavaScript engine을 가지고 있으며, 아래와 같이 각기 다른 engine을 사용하고 있다.