ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문서 객체 모델, 사용자 정의 객체, 이벤트 처리, JSON 변환
    프론트엔드 프로그래밍/JavaScript 2022. 1. 27. 22:52

    문서 객체 모델 (Document Object Model)

    -       객체 지향 모델로서 구조화된 문서를 표현하는 형식

    -       HTML 문서에 접근하기 위한 표준 모델

    -       표준은 대부분의 브라우저에서 DOM을 구현하는 기준

    -       문서 내의 모든 요소를 정의하고, 각 요소에 접근하는 방법을 제공

    -       웹 브라우저에서 보여지는 HTML 문서 태그 요소에 대한 정보와 문서에 대한 여러 가지 속성을 제공

    -       document 객체의 하위 객체를 이용하여 문서 내에서 일어나는 다양한 기능 제어

     

    DOM 사용 시기

    -       HTML 문서가 로드되고 나서 파싱 작업을 거쳐 DOM 트리 생성

    -       DOM 문서가 로드될 때 모든 DOM을 사용할 수 있게 되는 때

     

    문서 내의 요소 (태그) 제어 메소드

     

    문서 내의 요소(태그) 제어 메소드를 사용하여 요소를 선택할 때 자바스크립트 위치 주의

    -       문서 내에서 요소(객체)들이 생성되기전에

    -       자바스크립트를 선언하게 되면

    -       요소를 선택할 수 없음

    -       변경되지 않았음

    문서 내에서 요소(객체)들이 생성되기 전에

    자바스크립트를 사용하게 되면

    요소를 선택할 수 없음

    -       변경되었음

    요소(태그) 다음에 

    자바스크립트를 사용했기 때문에

    요소 선택 가능

    -       변경 되었음

    윈도우 로드 완료 후 자바스크립트 실행

    -       윈도우 로드 이벤트 확인 후에 자바스크립트 코드로 처리

     

    문서 내의 요소 (태그) 제어 메소드

    createElement(‘태그명’) : 요소(태그) 생성

    createTextNode(“출력할 문자열”) : 문자열 생성

    appendChild(노드) : 노드 연결 (부착)

     

    요소 (태그) 제어 메소드 예제1 : createElement.html

    -       <h3> 태그 생성

    -       문자열 (text) 생

    -       text를 h3에 연결

    -       h3를 body에 연결 (문서에 출력)

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>자바스크립트 DOM : createElement</title>
    <script type="text/javascript">
    	window.onload = function(){
    		// 1. 요소 생성
    		// <h3>태그 생성하고 객체 참조 변수에 저장
    		var h3 = document.createElement('h3');
    		
    		// 텍스트 노드 생성
    		var text = document.createTextNode("출력할 텍스트 : 홍길동");
    		
    		// 2. 문서에 출력
    		// 텍스트를 h3에 연결
    		h3.appendChild(text);
    		
    		// h3를 body에 연결(부착)
    		document.body.appendChild(h3);
    		
    	};
    </script>
    </head>
    <body>
    
    </body>
    </html>

    요소 (태그) 제어 메소드 예제2 : createElement2.html

    -       <img> 생성

    -       속성 설정

    -       문서에 출력 (body에 연결)

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 DOM : createElement</title>
    		<script type="text/javascript">
    			window.onload = function() {
    				// 1.  요소 노드 생성
    				// <img> 태그 생성
    				var img = document.createElement('img');
    				
    				// 속성 설정
    				img.src = "image/bird.jpg";
    				img.width = 250;
    				img.height = 180;
    				img.title = "예쁜새 ";
    				
    				// 2. 문서에 출력
    				document.body.appendChild(img);
    			};
    			
    		</script>
    	</head>
    	<body>
    		
    	</body>
    </html>

    getElementById()

    -       id를 통해 문서 내에서 요소(태그)를 참조하는 메소드

    -       지정한 id 속성값을 갖는 개체 중 첫 번째 개체 참조

    -       사용 

    -       var 참조변수 = document.getElementById(‘id’);

    -       <input id=”id”>

     

    getElementById() 예제1 : getElementById1.html

    -       id가 ‘header’인 태그를 찾아서 텍스트 변경

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 getElementById()</title>
    		<script type="text/javascript">
    			function change() {
    				// 태그의 id 속성의 값이 'header'인 문서 객체 반환
    				var header = document.getElementById('header');
    				// 요소의 텍스트 내용 변경
    				header.innerHTML = "변경된 제목";
    			}
    		</script>
    	</head>
    	<body>
    		<h1 id="header">제목</h1>
    		<button id="btn" onClick="change()">제목 변경</button>
    	</body>
    </html>

    getElementById() 예제2 : getElementById2.html

    -       [변경] 버튼 누르면 다음과 같이 변경

    -       이미지 : B.png

    -       텍스트 : 새로운 이미지로 변경되었습니다

    -       버튼 텍스트 : 완료

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 getElementById()</title>
    		<style type="text/css">
    			div { margin:0 auto; width:60%; text-align:center; }
    		</style>
    		<script type="text/javascript"> 
    			function change() {
    				var  imageA = document.getElementById('imageA');
    				var hint = document.getElementById('hint');
    				var changeButton=document.getElementById('changeButton');
    				
    				// 속성 변경
    				imageA.src="image/B.png";				
    				hint.innerHTML="새로운 이미지로 변경되었습니다";		
    				hint.style.background = "yellow";
    				changeButton.innerHTML="완료";
    			}
        </script>
    
    	</head>
    	<body>
    		<div>
    			<img id="imageA" src="image/A.png">
    			<div id="hint">[변경] 버튼을 누르면 이미지가 바뀝니다.</div> <br><br>
    			<button id="changeButton" onClick="change()">변경</button>
    		</div>
    	</body>
    </html>

    querySelector()

    -       1개의 선택자 선택

    -       동일한 요소가 여러 개인 경우 첫 번째 요소만 선택

    -       예제 : querySelector.html

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 querySelector()</title>
    		<script type="text/javascript">
    			window.onload = function() {
    				var header = document.querySelector('h1');
    				
    				header.style.color = 'orange';
    				header.style.background = 'skyblue';
    				header.innerHTML = 'JavaScript';				
    			};
    		
    		</script>
    	</head>
    	<body>
    		<h1>Header</h1>
    		<h1>Header</h1>
    		<h1>Header</h1>
    	</body>
    </html>

    querySelectorAll()

    -       동일한 요소가 여러 개인 경우 모든 요소 선택

    -       예제 : querySelectorAll.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>자바스크립트 querySeletor()</title>
    <script type="text/javascript">
    	window.onload = function(){
    		// 배열로 만들어짐
    		var headers = document.querySelectorAll('h1');
    		
    		for(var i=0; i<headers.length; i++){
    			
    			var header = headers[i];
    			
    			header.style.color = 'orange';	        // headers[i].style.color='orange';
    			header.style.background = 'skyblue';
    			header.innerHTML='JavaScript';
    		}
    		
    		
    	};
    	
    	</script>
    </head>
    <body>
    	<h1>Header</h1>
    	<h1>Header</h1>
    	<h1>Header</h1>
    
    </body>
    </html>

     

    getElementsByTagName(태그명)

    -       문서 내의 모든 요소를 배열 컬렉션으로 전달받아서 참조할 수 있게 해주는 메소드

    -       참조 값들을 배열로 만들어서 전달

    -       var tdArr = document.getElementsByTagName(‘td’);

    -       문서 내의 모든 <td> 태그 가져옴

    -       <td> 태그 수가 배열 크기가 됨

    -       for문 사용

    -       예제 : getElementsByTagName.html

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 getElementsByTagName()</title>
    		<style type="text/css">
    			div { margin:0 auto; width:600px; text-align:center;}
    			table {margin:0 auto; width:100%;}
    			td {width:50px; height:30px;} 
    		</style>
    		<script type="text/javascript">
    			window.onload = function(){
    				// 모든 <td> 요소 다 가져오기
    				var tdArr = document.getElementsByTagName('td');
    				
    				var setNumberBtn = document.getElementById('setNumberBtn');
    				var setColorBtn = document.getElementById('setColorBtn');
    				var clearNumberBtn = document.getElementById('clearNumberBtn');
    				var clearColorBtn = document.getElementById('clearColorBtn');
    				
    				// 셀에 번호 채우기 : 버튼 클릭 시 <td>에 i  값 출력
    				setNumberBtn.onclick = function (){
    					for(var i=0; i<tdArr.length; i++)
    						tdArr[i].innerHTML = i;
    				}
    				
    				// 셀에 색상 채우기 : 버튼 클릭 시 <td> 색상 표시 : 7가지 색상 출력
    				// red orange yellow green blue navy violet gold pink skyblue
    				// 색상을 배열로 생성
    				setColorBtn.onclick = function() {
    					var colors =["red", "orange", "yellow", "violet", "pink", "green", "gold"];
    
    	                for(var i = 0; i < tdArr.length; i++){
    	                    tdArr[i].style.background = colors[i];
    	                }
    	            }
    				
    				
    				// 셀의 번호 지우기 : 버튼 클릭 시 <td>의 숫자 삭제
    				clearNumberBtn.onclick = function() {
    	                for(var i = 0; i < tdArr.length; i++){
    	                    tdArr[i].innerHTML = "";
    	                }
    	            }
    				
    				// 셀의 색상 지우기 : 버튼 클릭 시 <td> 색상 제거
    				clearColorBtn.onclick = function() {
    	                for(var i = 0; i < tdArr.length; i++){
    	                    tdArr[i].style.background = ""; // "none"
    	                }
    	            }
    
    			};
    		</script>
    	</head>
    	<body>
    		<div>
    			<table border="1">
    				<tr>
    					<td></td><td></td><td></td><td></td>
    					<td></td><td></td><td></td>
    				</tr>
    			</table>		
    			<br><br>
    			<button id="setNumberBtn">셀에 번호 채우기</button>
    			<button id="setColorBtn">셀에 색상 채우기</button>
    			<br><br>
    			<button id="clearNumberBtn">셀의 번호 지우기</button>
    			<button id="clearColorBtn">셀의 색상 지우기</button>
    		</div>
    	</body>
    </html>

    이벤트 핸들러와 이벤트 처리

    -       사용자로부터 발생되는 여러 가지 이벤트 처리

     

     

    자주 사용되는 이벤트 핸들러

    인라인 방식 예제 : event1.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>이벤트 처리</title>
        <script type="text/javascript">
            function show(){
                alert("클릭2");
            }
        </script>
    </head>
        <body>
            <div onClick="alert('클릭1')">클릭1</div>
            <div onClick="show()">클릭2</div>
        </body>
    </html>

    고전 방식 예제 : mouseEvent.html

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<script src= "jquery-3.6.0.min.js"></script>
    		<title>jQuery 마우스 이벤트</title>
    		<script type="text/javascript">
    			$(document).ready(function(){
    				// 버튼 클릭했을 때
    				$('#btn').on('click', function(){
    					alert("클릭했습니다.");
    				});
    				
    				// 2개의 이벤트 처리
    				// 방법1 : .on(이벤트1).on(이벤트2)
    			/* 	$('#btn')
    					.on('mouseover', function(){
    						$(this).css('background-color', 'yellow');
    					})
    					.on('mouseout', function(){
    						$(this).css('background-color', '');
    					}); */ // on() 종료
    					
    				// 방법2 : .on({이벤트1, 이벤트2})
    				$('#btn').on({ 
    					mouseover: function(){
    						$(this).css('background-color', 'pink');
    					}, 
    					mouseout:function(){
    						$(this).css('background-color', 'skyblue');
    					}					
    				 });
    			});
    		</script>
    	</head>
    	<body>
    		<input type="button" id="btn" value="클릭하세요">
    	</body>
    </html>

    인라인 방식과 고전 방식의 이벤트 처리 방식의 경우

    -       동일한 객체에 대해 동일한 이벤트를 여러 번 사용 불가

    -       마지막 이벤트 하나만 적용

    -       예제 : sameEvent.html

     

    DOM 이벤트 리스너 등록

    -       addEventListner() 메소드 사용해서 이벤트 리스너 등록

    -       객체.addEventListner(‘이벤트명’, function(){   // 콜백 함수로 전달

              });

    -       콜백 함수로 화살표 함수 사용할 경우

    -       객체.addEventListner(‘이벤트명’, () => {

              });

    -       예제 : addEventListner.html

    -       addEventListner는 동일 이벤트 여러 번 적용 가능

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 addEventListner() </title>
    		<script type="text/javascript">
    			window.onload = function(){
    				var greenBtn = document.getElementById('greenBtn');
    				var redBtn = document.getElementById('redBtn');
    				var h2 = document.getElementById('h2');
    				
    				// 개체에 이벤트 리스너 등록 :  mouseover 이벤트
    				greenBtn.addEventListener("mouseover", function(){
    					h2.style.color = "green";
    				});
    				
    				// 개체에 이벤트 리스너 등록 :  click 이벤트
    				redBtn.addEventListener("click", function(){
    					h2.style.color = "red";
    				});
    			};
    		
    		</script>
    	</head>
    	<body>
    		<h2 id="h2"> 제목 색상 변경</h2>
    		<button id="greenBtn">green</button>
    		<button id="redBtn">red</button>
    	</body>
    </html>

    -       예제 : addEventListner2.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>addEventListner 동일 이벤트 처리</title>
    <script type="text/javascript">
    	window.onload = function(){
    		var btn = document.getElementById('btn');
    		
    		// 동일 이벤트 여러 번 적용 가능 : show1()과 show2() 둘 다 실행됨
    		btn.addEventListener("click", show1);
    		btn.addEventListener("click", show2);
    	};
    	
    	function show1(){
    	alert("실행1");
    	}
    	
    	function show2(){
    		alert("실행2");
    		}
    </script>
    </head>
    <body>
    	<button id = "btn">클릭</button>
    </body>
    </html>

    -       예제 : 화살표 함수 사용 : addEventListner3.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>addEventListner + 화살표 함수</title>
    <script type="text/javascript">
    	window.onload = function(){  // function대신 ()=>도 가능
    		
    		let box = document.getElementById("box");
    		
    		box.addEventListener('mousedown', event => {
    			event.currentTarget.style.background='green';
    		});
    		
    		box.addEventListener('mouseup', event => {
    			event.currentTarget.style.background='white';
    		});
    	};
    	</script>
    </head>
    <body>
    	<div id = "box">클릭</div>
    </body>
    </html>

    폼 유효성 확인

     

    form 객체

    -       document 객체의 하위 객체

    -       form 태그 내에 들어 있는 여러 입력 양식을 제어

    -       form의 하위 객체들 

     폼 객체 사용 방법

    -       (1) 태그의 name 속성을 객체로 사용하는 경우

    -       <form name=”newMemberForm”>

    -       <input type=”text” name=”id”>

    -       <input type=”password” name=”passwd”>

    -       newMemberForm.id.focus();

    -       newMemberForm.id.value = “”;

    -       newMemberForm.passwd.focus();

    -       (2) 문서 객체 모델 (DOM) 방식을 사용하는 경우

    -       <input type=”text” id=”name”>

    -       var name = document.getElementById(‘name’);

    -       name.focus();

    -       name.value = “”;

     

    폼 유효성 확인 예제

    -       join.html

    -       별도의 checkForm.js 파일 생성 (External 방식)

    -       <script src="checkForm.js"></script>

    -       입력 값 확인

    -       <input> 성명 입력하지 않은 경우

    -       <input> ID 입력하지 않은 경우

    -       <input> ID 입력 값의 길이가 6~10가 아닌 경우

    -       <input> [비밀번호]와 [비밀번호 확인]이 일치하지 않은 경우

    -       <select>에서 선택하지 않은 경우

    -       라디오 버튼 하나도 체크하지 않은 경우

    -       체크박스에서 하나도 선택하지 않은 경우

    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>회원 가입 폼</title>
            <script src="checkForm.js"></script>
        </head>
        
        <body>
        	<div id="wrap">
                  <div id="joinBox">                     
                      <h2  align="center">회원가입</h2>
                      <hr>
                       <form  name="joinForm" id="joinForm" method="post" action="joinMemberOk.jsp">
                           <table align="center">	
                               <tr>
                                   <td>성명</td>
                                   <td><input type="text" name="name" id="name"></td>
                               </tr>
                               <tr>
                                   <td>아이디</td>
                                   <td><input type="text" name="id" id="id" border=0> 
                                   <input type="button" value="ID중복체크"> (영문자+특수문자: 6~10자)</td>
                               </tr>
                               <tr>
                                   <td>비밀번호</td>
                                   <td><input type="password" name="password" id="password" size="21"> 
                                   (영문자+숫자+특수문자: 10~20자)</td>
                               </tr>
                               <tr>
                                   <td>비밀번호 확인</td>
                                   <td><input type="password" name="passwordCheck" id="passwordCheck" size="21"></td>
                               </tr>	
                               <tr>
                                   <td>생년월일 </td>
                                   <td>
                                       <input type="text" name="birthYear" id="birthYear" size="4">년
                                       <select name="birthMonth">
                                           <option value="1">1
                                           <option value="2">2
                                           <option value="4">3
                                           <option value="4">4
                                           <option value="5">5
                                           <option value="6">6
                                           <option value="7">7
                                           <option value="8">8
                                           <option value="9">0
                                           <option value="10">10
                                           <option value="11">11
                                           <option value="12">12 
                                       </select> 월
                                       <select name="birthDay">
                                           <option value="1">1
                                           <option value="2">2
                                           <option value="4">3
                                           <option value="4">4
                                           <option value="5">5
                                           <option value="6">6
                                           <option value="7">7
                                           <option value="8">8
                                           <option value="9">0
                                           <option value="10">10
                                           <option value="11">11
                                           <option value="12">12
                                           <option value="13">13
                                           <option value="14">14
                                           <option value="15">15
                                           <option value="16">16
                                           <option value="17">17
                                           <option value="18">18
                                           <option value="19">19
                                           <option value="20">20
                                           <option value="21">21
                                           <option value="22">22
                                           <option value="23">23
                                           <option value="24">24
                                           <option value="25">25
                                           <option value="26">26
                                           <option value="27">27
                                           <option value="28">28
                                           <option value="29">29
                                           <option value="30">30
                                           <option value="31">31 
                                       </select> 일
                                       <input type="radio" name="solar" value="양력" checked>양력
                                       <input type="radio" name="solar" value="음력">음력
                                   </td>
                               </tr>        
                               <tr>
                                   <td>전화번호 </td>
                                   <td><select name="tel1">
                                       <option value="02" selected>02
                                       <option value="031">031
                                       <option value="043">043
                                       </select>
                                        - <input type="text" name="tel2" id="tel2" size="4">
                                        - <input type="text" name="tel3" id="tel3"size="4">
                                   </td>
                               </tr>
                               <tr>
                                   <td>휴대폰번호 </td>
                                   <td><select name="hp1">
                                       <option value="000">000
                                       <option value="010" selected>010
                                       </select>
                                        - <input type="text" name="hp2"  id="hp2"size="4">
                                        - <input type="text" name="hp3"  id="hp3"size="4">
                                   </td>
                               </tr>
                               <tr>
                                   <td>주소 </td>
                                   <td><input type="text" name="zipcode" id="zipcode" readonly> 
                                   <input type="button" value="우편번호찾기"><br>
                                   <input type="text" name="address1" id="address1" size="40"  readonly><br>
                                   <input type="text" name="address2" id="address2" size="40">상세 주소 입력
                                   </td>
                               </tr>                                    
                               <tr>
                                   <td>성별</td>
                                   <td>
                                       <input type="radio" name="sex" value="남" checked>남
                                       <input type="radio" name="sex" value="여">여
                                   </td>
                               </tr>		
                               <tr>
                                   <td valign="top">직업</td>
                                   <td>
                                       <select id ="job">
                                       		<option value="">직업선택
                                           <option value="웹디자이너">웹디자이너
                                           <option value="프로그래머">프로그래머
                                           <option value="회사원">회사원
                                           <option value="학생">학생
                                           <option value="영화감독">영화감독
                                           <option value="웹마스터">웹마스터
                                       </select>
                                   </td>
                               </tr>
                               <tr>
                                   <td valign="top">이메일</td>
                                   <td>
                                       <input type="text" name="email1"  id="email1" size="6">@<select name="email">
                                           <option value="naver"  selected>naver.com
                                           <option value="gmail">gmail.com
                                           <option value="nate">nate.com
                                           <option value="hanmail">hanmail.net
                                       </select>
                                   </td>
                               </tr>
                               <tr>
                                   <td>이메일 수신 여부</td>
                                   <td>
                                       <input type="radio" name="emailRcv" value="yes">예
                                       <input type="radio" name="emailRcv" value="no">아니오
                                   </td>
                               </tr>       
                                <tr>
                                   <td>동의</td>
                                   <td>
                                       <label><input type="checkbox" id="agreement1" value="모든약관">모든 약관에 동의</label>
    							       <label><input type="checkbox" id="agreement2" value="개인정보">개인 정보 이용 동의</label>
                                   </td>
                               </tr>		
                               <tr>
                                   <td colspan="2" align="center">
                                       <input type="submit" value="회원가입">
                                       <input type="reset" value="취    소">
                                   </td>
                               </tr>
                           </table>	
                       </form>
                 </div>    
            </div>
    	</body>
    </html>

    <select> 태그

    -       목록에 있는 여러 항목 중 선택

    -       (1) 항목 선택하면 selectedIndex 속성에 선택된 항목의 인덱스 값 저장 (0부터 시작)

    -       하나도 선택하지 않으면 selectedIndex 값은 -1

    -       첫 번째 <option> 태그를 빈값으로 하고,

    -       if(job.selectedIndex  == 0) { }

    -       (2) 또는 <option> 태그 중 하나를 빈 값으로 지정하고, 값이 없으면 선택하지 않은 것으로 처리해도 됨

    -       <option value=”” selected>직업선택

    -       if(job.value == “”) {  }

    -       (3) 또는 <option> 태그 하나를 미리 선택해 놓으면 유효성 확인 필요 없음

    -       <option value="프로그래머" selected>프로그래머

     

    라디오 버튼

    -       <input type=”radio”>

    -       그룹에서 여러 개 중 1개만 선택 가능

    -       그룹에 속한 여러 개의 라디오 버튼의 그룹 이름(name 속성)이 동일하므로 라디오 버튼 (객체)는 배열 형태로 사용

    -       배열의 각 원소를 하나씩 확인

    -       checked 속성이 true면 체크된 상태

    -       false면 체크되지 않은 상태

    -       for 문 사용 사용 / if 문 사용

    -       미리 체크되어 있게 하면 유효성 확인 필요 없음

     

    체크 박스

    -       <input type=”checkbox”>

    -       여러 개 선택 가능

    -       checked 속성이 true이면 체크된 상태

    -       false명 체크되지 않은 상태

    -       모든 체크박스 확인해야 함


    getElementById() 사용

    -       DOM 요소가 로드된 상태라면

    -       getElementById() 사용하지 않고 id속성만으로 요소 사용 가능

    -       주의점!

    -       동일한 이름의 전역 변수 존재한다면 작동안 됨

    -       예제 : use_GetElementById.html


     사용자 정의 객체

    -       사용자가 직접 필요한 객체를 생성해서 사용

     

    사용자 정의 객체 생성 방법

    -       (1) 리터럴 이용

    -       (2) 생성자 함수 (function()) 이용

    -       (3) new Object() 이용 (ES5에 추가)

    -       (4) class 정의하고 객체 생성 (ES6에 추가)

     

    (1) 리터럴 이용

    -       객체 선언 : 멤버 추가

    -       프로퍼티(속성) : 속성값

    -       멤버 메소드 추가

    -       형식

    -       var 객체 = {

                  // 변수 : 프로퍼티(속성)

                  프로퍼티명(속성명)1 : 값1,

                  프로퍼티명(속성명)2 : 값2

     

                 // 멤버 메소드

                 메소드명 : function() {

                        수행 코드;

                }

              };

     

              // 객체 사용

            객체.프로퍼티;

            객체.메소드();


           var person = {

              name : “홍길동”,

              age : 20,

              getName : function() {

                        return this.name;

             }

          };

     

        //객체 사용 

        person.getName();  //객체의 멤버 메소드 사용 (호출)

     

    예제 : object1-literal.html

     

    (2) 생성자 함수 (function()) 이용

    -       함수 선언과 같은 방식으로 function 키워드 사용하여 선언(정의)

    -       함수를 클래스처럼 사용

    -       function 함수명() : 생성자 기능

    -       프로퍼티 설정 : this.프로퍼티

    -       new 연산자를 사용해서 객체 생성

    -       형식

    -       function 함수명() {   //함수(클래스로 이용) 선언 (생성자 기능)

                                  //프로퍼티 추가

                                  this.프로퍼티1 = 값1;

                                  this.프로퍼티2 = 값2;

     

                                  // 메서드 추가

                                  this. 메서드 = function() {

                                            수행 코드;

                                  }

                        }

     

                        // 객체 생성

                        var 객체(인스턴스) = new 함수명();                    객체.메소드();

                        객체.프로퍼티1;

                        —------------------------------------------

                        //함수(클래스로 이용) 선언 (생성자 기능)

                        function People() {

    // 프로퍼티 추가

    this.name = “홍길동”;

    this.age = 20;

     

    // 메서드 추가

    this.getName = function() {

       return this.name;

    }

    }

     

    // 객체 생성

    var person = new People(); // 생성자 처럼 사용

    person.getName();// 메서드 호출

     

    예제 : object2-function.html

    함수이므로 호이스팅 가능 

     

    예제2 : object3-function2.html

    -       <ul> 태그 객체 생성

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 객체 생성 : 생성자 함수 이용</title>
    		<script type="text/javascript">
    			// 생성자 함수를 이용해서 객체 정의(선언)
    			function ListTag() {
    				//프로퍼티 지정
    				this.ulTag = document.createElement("ul");
    				this.ulTag.type = "square";
    				
    				// <li> 태그 생성해서 <ul>태그에 추가 
    				for(var i=1; i<=5; i++){
    					var listItem = document.createElement("li");
    					var itemInput = prompt("꽃" + i + " 입력");
    					listItem.innerHTML = itemInput;
    					//<ul> 태그에 <li> 태그 추가
    					this.ulTag.appendChild(listItem);
    				}
    				
    				//멤버 메서드
    				this.getListItem = function() {
    					return this.ulTag;
    				}
    			}
    			
    			// 객체 생성
    			window.onload = function() {
    				var list = new ListTag(); // 객체 생성
    				
    				// box <div> 태그에 <ul> 태그(객체) 추가
    				var box = document.getElementById("box");
    				box.appendChild(list.getListItem());
    			}
    		</script>
    	</head>
    	<body>
    		<div id="box"></div>
    	</body>
    </html>

    prototype : 프로토타입

    -       객체를 만드는 원형

    -       함수도 객체이고, 객체인 함수가 기본으로 갖고 있는 프로퍼티

    -       함수의 객체가 생성될 때 모든 객체가 공유하는 공간

    -       자바의 static 개념

     

    prototype에 멤버 정의

    -       멤버를 함수 외부에 선언

    -       여러 객체가 공유하게 하는 방법

     

    예제 : object4-prototype.html

     

    prototype 사용 시 이점

    -       생성자 함수 이용해서 객체 생성할 때

    -       프로퍼티와 메서드는 객체마다 생성됨

    -       사용하지 않을 경우에도 생성되기 때문에 메모리 낭비

    -       프로퍼티와 메서드를 미리 만들어 놓지 않고

    -       필요 시 추가한 후 모든 객체에서 공유함으로써 

    -       메모리 낭비를 줄일 수 있음


    (3) new Object() 이용 (ES5에 추가)

    -       new Object()로 빈 객체 생성한 후

    -       프로퍼티 추가

    -       멤버 메서드 추가

    -       객체.메서드() // 객체의 멤버 메서드 사용

    -       형식

    -       var 객체 = new Object(); // 빈 객체 생성 (new 생략 가능)

              // 프로퍼티 추가

              객체.프로퍼티 = 값;

              // 멤버 메서드 추가

              객체.메서드명 = function(){

                        수행 코드;

              }

     

              // 객체의 멤버 메서드 호출 (사용)

              객체.메서드();

    예제 : object5-Object.html

     

    (4) class 정의하고 객체 생성 (ES6에 추가)

    -       class 키워드 사용

    -       생성자 / Getters / Setters 가능

    -       Getters : 메서드 앞에  get 붙임

    -       주의! 프로퍼티 사용 시 앞에 밑줄문자(_) 붙여서 사용

    -       Setters : 메서드 앞에 set 붙임

    -       주의! 프로퍼티 사용 시 앞에 밑줄문자(_) 붙여서 사용

    -       getter / setter 호출 시 괄호() 안 붙임

    -       객체.메서드

    -       호이스팅 불가

    -       형식

    -       class 클래스명 {

                        생성자() { }

                        Getters 

                        Settters

                        메서드();

              }

     

              // 객체 생성

              let 객체 = new 클래스();

              객체.메서드();

     

    예제 : object6-class.html

     

    클래스 생성 연습문제 : object7-classEx.html  

    클래스 : Rectangle

    -       프로퍼티 : width, height

    -       생성자 / getter / setter

    -       메서드 : getArea() : 넓이를 구해서 반환

    -       출력

    -       getter 호출해서 가로 길이, 세로 길이 출력

    -       사각형의 넓이 출력

    -       setter  호출해서 가로 길이, 새로 길이 변경

    -       변경된 사각형의 넓이 출력

    -       출력 내용

    -       가로 길이 : 30, 세로 길이 10

    -       사각형의 넓이 : 300

    -       (출력 안 됨 : 가로 길이를 20, 세로 길이를 30으로 변경)

    -       사각형의 넓이 : 600


    자바스크립트 객체 JSON 변환

     

    JSON(JavaScript Object Notation)

    -       자바스크립트 객체 표기법

    -       key와  value 값이 쌍으로 구성된 형태의 객체 표기법

    -       클라이언트와 서버 사이에서 데이터 교환 목적으로 사용

    -       웹 서버에서 수신하는 데이터는 문자열인데, 문자열 데이터를 JSON 파싱 함수를 사용해서 자바스크립트 객체로 변환 가능

    -       최근의 브라우저들은 전부 내장 객체로 JSON 변환 기능 지원

    -       JSON 데이터 형식

    -       {key:value}

    -       {“name” : “홍길동”}

     

    자바스크립트 객체 JSON 변환

    -       자바스크립트 객체 → JSON data로 변환 

    -       stringify() : 메서드 사용

    -       결과 : 제이슨 형태의 문자열

    -       JSON data를 자바스크립트 객체로 변환

    -       parse() 메서드

    -       결과 : object

     

    예제 : json_parsing.html

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 </title>
    		<script type="text/javascript">
    			// 자바스크립트 객체 생성
    			let car = {
    					no:'11가1111',
    					name:'소나타',
    					maker:'현대',
    					cc:2000,
    					year:2021,
    					accident:null
    			};
    			
    			// 자바스크립트 객체를 JSON 데이터로 변환
    			var json = JSON.stringify(car);
    			console.log(json);
    			// {"no":"11가1111","name":"소나타","maker":"현대","cc":2000,"year":2021,"accident":null}
    			
    			// JSON 데이터를 자바스크립트 객체로 변환
    			var obj = JSON.parse(json);
    			console.log(obj);
    			console.log(obj.no);
    			console.log(obj.name);
    			
    			// 전체 값 출력
    			for(var i in obj){
    				console.log(obj[i]);
    			}
    		</script>
    	</head>
    	<body>
    		
    	</body>
    </html>

    연습문제 : jsonEx.html

    Description : “저는 독서 지도사입니다” 추출해서 출력

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>자바스크립트 JSON 데이터 파싱 </title>
    		<script type="text/javascript">
    			var result = {"version":"v2","userId":"U47b00b58c90f8e47428af8b7bddc1231heo2","timestamp":1621444015108,"bubbles":[{"type":"text","data":{"description":"저는 독서 지도사입니다"},"information":[{"key":"chatType","value":"TEXT"},{"key":"chatType","value":"TEXT"},{"key":"score","value":"1.0"},{"key":"scenarioName","value":"자기 소개"},{"key":"conversationTypes","value":"소개␞직업␞일␞역할␞담당␞누구"},{"key":"matchingType","value":"exactMatch"},{"key":"domainCode","value":"ai_chatbot_ex"}],"context":[]}],"scenario":{"name":"자기 소개","chatUtteranceSetId":3305931,"intent":["소개","직업","일","역할","담당","누구"]},"entities":[],"keywords":[],"event":"send"};
    			console.log(result);  // Object 
    			
    			var bubbles = result.bubbles;
    			for(var i in bubbles){
    				console.log(bubbles[i].data.description);
    			}
    			
    			// scenario name  "자기 소개" 추출
    			console.log(result.scenario.name);
    			
    			// intent 추출 : 소개, 직업, 일, ...., 누구
    			var intent = result.scenario.intent;
    			for(var i in intent){
    				console.log(intent[i]);
    			}
    			
    			// imageUrl 값 추출 
    			var result2 = {"version":"v2","userId":"U47b00b58c90f8e47428af8b7bddc1231heo2","timestamp":1621393563377,"bubbles":[{"type":"template","data":{"cover":{"type":"image","data":{"imageUrl":"https://clovachatbot.ncloud.com/ib496e504bl244-0639-439d-93b0-ec4d72655cf8","imagePosition":"top","action":{"type":"link","data":{"url":"https://www.multicampus.com/cs/map/mapMain?p_menu=MTA1I01BSU4=&p_gubun=Qw==&req=0"}}}}}}],"scenario":{"name":"독서 모임 장소 약도 문의","chatUtteranceSetId":3306432,"intent":["장소","위치","지도","약도"]},"entities":[],"keywords":[],"event":"send"};
    			console.log(result2.bubbles[0].data.cover.data.imageUrl);
    			// 또는
    			var bubbles = result2.bubbles;
    			for(var i in bubbles)
    				console.log(result2.bubbles[i].data.cover.data.imageUrl);
    
    		</script>
    	</head>
    	<body>
    		
    	</body>
    </html>

    댓글

Designed by Tistory.