본문 바로가기

Javascript

Javascript 8일차 DOM, BOM, addEventListener, callback, onload

BOM (브라우저 객체 모델(Browser Object Model))

웹 서비스 개발은 브라우저와 밀접한 관련이 있습니다. 모든 서비스는 사실 웹 브라우저를 바탕으로 실행이 되니까요.

이 브라우저와 관련된 객체들의 집합을 브라우저 객체 모델(BOM: Browser Object Model)이라고 부릅니다. 이 브라우저 객체 모델(BOM)을 이용해서 Browser와 관련된 기능들을 구성합니다. DOM은 이 BOM  중의 하나입니다. 

 

 

DOM (문서 객체 모델(The Document Object Model))

문서 객체란 <html>이나 <body> 같은 html문서의 태그들을 JavaScript가 이용할 수 있는 객체(object)로 만들면 그것을 문서 객체라고 합니다. (그럼 html문서의 태그들이 객체에 담긴 상태를 의미하는 것일까요? )

 

여기에 Model을 붙였는데 Model이라는 영어 단어에는 모형, 주형이라는 의미도 있고 모듈이라는 의미도 있습니다. 비슷하게 여기서는 문서 객체를 '인식하는 방식'이라고 해석할 수 있습니다.

이제 조금은 명확해 지지 않았나요? 이제 조금 더 명확하게 DOM을 정의해보겠습니다. DOM은 넓은 의미로 웹 브라우저가 HTML 페이지를 인식하는 방식을 의미합니다. 조금 좁은 의미로 본다면 document 객체와 관련된 객체의 집합을 의미할 수도 있습니다. 

이제 DOM을 보게 되면 웹 브라우저가 html 페이지를 인식하는 방식을 이야기 하거나 문서 객체(document object)와 관련된 객체의 집합에 관한 이야기라는 것을 쉽게 추측할 수 있습니다.

 

 

addEventListener를 이용해서 버튼을 만들기

<body>
    <button id="btn">버튼</button>
      
    <script type="text/javascript"> 
        let btn = document.querySelector("#btn") // 데이터타입 : Object, 객체로 반환해서 나타낸다.
						// or-> let btn = document.getElementById('btn')
        btn.addEventListener('click',clickBtn) 
        
        function clickBtn(){
            console.log('hellow world!')
        }		 // btn.addEventListener -> btn이 HTML에 관련된 객체여야만 addEventListener를 쓸 수 있다.
			// addEventListener : 인자값은 총 2개이며 첫번째 인자값에는 String(이벤트명)을 넣습니다.
           	       // 두번째 인자값에는 콜백(callback) 내용을 넣습니다.
let btn = document.querySelector("#btn")asdasdasdasdada
 
1. document.querySelector("#btn") -> Element를 가져온다.
 
2. 가져온 Element의 데이터타입은 Object이다.
 
3. 컴퓨터는 코드를 읽을 때 위에서부터 아래로 읽기 때문에 코드를 유의해서 작성해야 한다.
 
4. querySelector() -> 브라우저를 만들어줌, () 안에 들어가는 인자값을 중요하게 생각해야한다! 인자값에 해당하는 내용을 찾아서 가져온다.
 
 
아래와 같이 함수를 만들어보자.
function aa(num1,num2){       
            return num1 + num2       
        }                           

        aa(1,2)                 

        let obj = {
            sum:aa,   // aa, 
        }                 
        
        console.log(obj.sum) // ƒ aa(num1,num2){ return num1 + num2 }
 
aa라는 함수를 정의했고 호출했으며 인자값에는 1,2가 들어가있고 매개변수로는 num1, num2가 들어가 있다.
거기다 num1 + num2의 값을 리턴했다.
 
여기에 obj라는 객체를 만들어서 sum이라는 key값에 aa함수를 넣어달라고 한 결과를 볼 수 있다.
 
함수를 정의하고 함수를 호출할려고 할 떄
뒤에 ( )를 쓰지 않으면 함수를 정의한 코드만 나온다.
 
그렇다면 ( )의 의미는 무엇인가 ..? ( ) 이 친구는 그냥 함수를 실행시켜주는 친구구나...           
= 아 함수는 당장 실행하지 않고도  어딘가에 담아서 사용이 가능한거구나!
 
함수정의 후 호출할때 ( ) 있고 없고의 차이를 알아야한다. 
 
잠깐 함수를 담고싶을 때 많이 쓰는 방법이다. ()없이 사용하는것
 
 
 
그렇다면 callback의 의미는 무엇일까?
	function 함수(param){
            console.log(" '함수' 안에서 실행 : ", param)
            param()
        }

        
        function 테스트(){
            console.log('hello world!')
        }

        함수(테스트)
        
        // 매개변수에 함수가 들어오는 경우가 callback
        // 인자값에 함수를 집어넣을 수 있다  함수 코드를 넣을 수 있다. -> ()쓰지 않고 넣을 수 있다.
        // 그러면 함수를  실행시키기 위해선 어떻게 해야하나? -> param()

이처럼 콜백(callback)은 인자값에 함수를 넣어서 함수안에서 다른 함수를 실행시키고 싶을 때 사용하는 것이다.

 

 

 

심화단계 --

function 함수(type,param){
            if(type =="click"){
                param()
            } else{
                console.log("type를 console로 입력해주세요")
            }
            
        }

        
function 테스트(){
            console.log('hello world!')
        }

        함수("click", 테스트)
        
        // -> 함수 매개변수에 type, param을 넣고  type에 click이라는 string 인자값을 넣음으로써 연결지을 수 있다.
        
        
        ---------------------------------------------------------------------------------------
        let elementObj = {
            addEventListener : 함수,
        }

        // elementObj.addEventListener("click", 테스트) 1.
        // =
        // elementObj.addEventListener("click", [함수코드]) 2.

        3.
        elementObj.addEventListener("click", function() { console.log('익명함수')})
        elementObj.addEventListener("click", function() { console.log('두번째')})
        elementObj.addEventListener("click", () => {console.log('세번째')})
        elementObj.addEventListener("click", () => console.log('네번째'))
        elementObj.addEventListener("click", _ => {console.log('다섯번째')})
        // 함수코드를 넣는 방법
        // 1. 함수를 정의한 다음에 함수명만 작성해서 보내기.
        // 2. 익명함수를 바로 작성해서 보내는 방법도 있다.
        // 3. 익명함수를 Arrow 함수로 바꿔서 보내는 방법도 있다.

 

 

 

script 외부연결과 onload

 

자바스크립트 파일을 따로 만들어준다 -> index2.js

 

<head> 부분에 src="/index2.js를 추가로 넣어준다.

    <title>Document</title>
    <script type ="text/javascript" src="./index2.js"></script>


</head>

 

onload

 

onload에는 2가지 방식이 있다

1. 첫 번째는 옛날에 주로 쓰던 방식으로 window.onload = function( ) { }가 있다.

// 옛날문법 13년전에 사용
window.onload = function(){
    // body부분은 코드를 인식하지 않는다 하지만 onload를 통해 함수 code block 안에 넣으면 전체가 로드가 되면서 실행이된다.
    const btnElement = document.querySelector('#btn')
    console.log('index2.js : ' , btnElement)
}

 

 

 

2. 두 번째는 요즘에 주로 쓰는 방식으로 window.addEventListener( 'DOMContentLoaded', ( ) => { })

window.addEventListener('DOMContentLoaded', () => {  //DOMContentLoaded : HTML이 끝나면 실행한다. 
                                                     // DOMContentLoaded는 HTML만 실행하기 때문에 시간이 더 적게 걸린다.
    // code block
    const btnElement = document.querySelector('#btn')
    console.log('index2.js DOM Conetent Loaded : ' , btnElement)

 

 

 

 

 

 

'Javascript' 카테고리의 다른 글

javascript 10일차 querySelectorAll( ), setInterval( ), setTimeout( )  (0) 2022.01.12
javascript 9일차 TO DO LIST 만들기  (0) 2022.01.11
Javascript 7일차  (0) 2022.01.07
Javascript 6일차  (0) 2022.01.07
Javascript 5일차  (0) 2022.01.05