주다람
개미는 뚠뚠🎵 오늘도 뚠뚠🎵 열심히 개발하네✨
주다람
전체 방문자
오늘
어제
  • 분류 전체보기
    • 💭 기록해보자
      • BackEnd
      • FrontEnd
      • 회고
    • 💻 수업정리 (2020)
      • 오라클
      • 자바
      • CSS & HTML
      • JavaScript
      • Servlet
      • JSP
    • 📚 알고리즘
      • DP(다이나믹 프로그래밍)
      • 탐색(BFS,DFS)
      • 다익스트라
      • 순열과 조합
      • 백트래킹
      • 이분탐색(binarySearch)
      • 탐욕(Greedy)
      • 스택,큐,덱(Stack,Queue,Deque)
      • 유니온파인드(Union-Find)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 오라클
  • 박스모델
  • group by
  • 함수
  • oracle
  • 일반함수
  • 날짜함수
  • 그룹함수
  • background-gradient
  • 변환함수
  • 숫자함수
  • 문자함수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
주다람

개미는 뚠뚠🎵 오늘도 뚠뚠🎵 열심히 개발하네✨

[7/15] 자바스크립트 기초2
💻 수업정리 (2020)/JavaScript

[7/15] 자바스크립트 기초2

2020. 7. 15. 17:54

📌지역변수와 전역변수

지역 변수 : 함수 내부에서 선언되었기 떄문에 선언된 함수에서 변수로 사용가능

전역 함수 : 함수 외부에서 선언된 변수로, 모든 함수에서 변수로 사용 가능

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>전역변수와 지역변수</h1>
	<hr>
	<p>전역변수(Global Variable) : 함수 외부에서 선언된 변수 -모든 함수에서 변수(값) 사용가능</p>
	<p>지역변수(local Variable) : 함수 내부에서 선언된 변수 -선언된 함수(블럭)에서 변수(값)사용가능 </p>
	
	<script type="text/javascript">
	var globalVar = 100; //전역변수
	
	function print1(){
		//alert("print() 함수 = " + globalVar)
		
		//var키워드를 생략하여 사용할 경우 전역변수로 처리하기 때문에 주의!!
		var localVar = 300;//함수 종료시 자동 소멸
		alert("print() 함수 = " + localVar);
	}
	
	function print2(){
		//다른함수에서 선언된 지역변수는 사용 불가능
		alert("print() 함수 = " + globalVar);
	}
	
	print1();
	print2();
	
	</script>
	
</body>
</html>

 

📌매개변수

argument는 배열객체라고 한다. 자바스크립트가 가지고 있는 내장 객체이다.

따라서 arguments.length로 길이도 알 수 있고, arguments[i]로 인덱스로도 접근이 가능하다

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>매개변수(Argument)</h1>
	<hr>
	<p>매개변수 : 함수의 명령실행에 필요한 값을 함수 호출 시 전달받기 위한 </p>
	
	<script type="text/javascript">
	function sum(num1, num2) {
		alert("sum = " + (num1 + num2));
	}
	
	//매개변수의 갯수보다 적은 갯수의 값 전달 가능
	//=>값을 전달받지 못한 매개변수는 undefined형태로 표현된다 => 비정상적인 실행
    sum(10);
    
	sum(10,20);
	
	//매개변수의 갯수보다 많은 갯수의 값 전달 가능
	//=>매개변수에 전달되지 않은 값은 자동 소멸된다
	sum(10,20,30); //결과는 30(10+20)
	
	function total(){
		//alert("total 함수호출");
		
		//arguments : 함수 호출 시 전달된 모든 값들을 저장하기 위한 객체 
		//alert(typeof(arguments));
		
		//arguments.length : 객체에 저장된 값의 갯수 = 배열객체 
		//=> 요소의 갯수를 표현
		//alert(arguments.length);//10,10,10을 전달 했으므로 3이 출력된다
		
		var tot = 0;
		for(var i = 0 ; i<arguments.length; i++){
			tot += arguments[i];
		}
		
		alert(tot);
	}
	
	total(10,10,10);
	
	</script>

</body>
</html>

 

📌return

 : 함수를 종료하기 위한 명령 또는 함수 내부값을 호출시, 반환하는 기능을 제공한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>Return</h1>
	<hr>
	<p>함수를 종료하기 위한 명령 - 함수 내부 값을 호출시 반환하는 기능 제공</p>
	
	<script type="text/javascript">
	function sum(num1, num2) {
		if(isNaN(num1) || isNaN(num2)) {
			alert("숫자값을 2개를 전달해야 함수 호출이 가능합니다.");
			return;//함수 종료
		}
		
		return num1+num2;//함수를 종료하며 값 반환
	}
	
	//함수를 호출하여 반환되는 값을 변수에 저장
	//var tot=sum(10,20);
	//alert("합계 = "+tot);
	
	//alert("합계 = "+sum(10,20));
	
	//함수 호출시 반환값이 없는 경우 undefined 형태로 출력
	//alert("합계 = "+sum());
	alert("합계 = "+sum("abc",20));
	</script>
</body>
</html>

 

📌내부함수

이미 print라는 함수가 존재한다고 가정할때, 그것을 인지하지 못하고 또 같은 이름으로 함수를 만들 경우, 기존에 있던 함수에 내가 만든 함수로 덮어씌우기가 되므로 조심해야한다.

이것을 방지하기 위해서 내부함수를 사용한다.

겉표현의 함수이름은 outerFunction으로 지정해놓고, 내가 만들고싶은 함수를 그 안에 마음대로 구현하면 된다. 함수내부에 내가 만든 함수를 실행하는 명령도 반드시 넣어주어야 실행이된다는것을 주의!!

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>내부함수(Inner Function)</h1>
	<hr>
	<p>내부함수 : 내부에서만 함수 호출 가능
		-선언된 함수 내부에서만 함수 호출 가능</p>
		
	<script type="text/javascript">
	/*function print() {
		alert("print함수 호출");
	}
	
	print();
	
	//동일한 이름의 함수를 선언할 수 있다.
	//=>기존함수 덮어 씌우기가 되므로, 위에 print함수는 없어지고 밑에 print함수가 남는다
	function print() {
		alert("밑에 print함수 호출")
	}*/
	
	function outerFunction() {
		//내부함수 : 다른함수로 덮어씌우기 선언하지 못하도록 작성한다
		function print() {
			alert("outerFunction()에 선언된 print() 내부함수 호출");
		}
	
		//내부함수는 선언된 함수 내에서만 호출이 가능하다
		print();
	}
	
	outerFunction();
	print(); //이렇게 하면 덮어씌워지지 않고 따로따로 선언이 가능해 진다
	
	function print() {
		alert("밑에 print함수 호출")
	}
	
	</script>
	
</body>
</html>

 

📌callback함수(=함수가 불러진다)

: 함수의 매개변수에 외부함수를 전달하여 저장하고, 매개변수로 함수 내부에서 호출되는 함수

외부함수로 만들어서 호출되는 것은 내부함수처럼 호출하는 형태. 이벤트 핸들러가 주로 이런형식으로 짜여지므로 중요하다★

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>콜백함수</h1>
	<hr>
	<p>함수의 매개변수에 외부함수를 전달하여 저장하고 매개변수로 함수 내부에서 호출되는 함수
	
	<script type="text/javascript">
	
		//이거 자체가 선언문이기 때문에 미리 만들어진다
		function print1() {
			alert("함수 호출 - 함수명 이용");
		}
		
		//함수명은 함수를 저장하는 함수 변수 이다
		//alert(typeof(print1));//function자료형
		//alert(print1);//함수가 호출된다
		
		//함수명을 이용하여 함수를 호출
		//print1();
		
		//얘는 =(저장하라는 명령)이기 떄문에 미리 호출x 그렇기 때문에 변수는
		//선언되어있지만, 함수가 호출이 나중에 되기 때문에 값이 저장되어 있지 않게 된다
		var print2 = function() {//익명의 함수를 이용
			alert("함수 호출 - 함수 변수 이용")
		}
		
		//alert(typeof(print2)); //얘도 function자료형
		
		//함수변수를 이용하여 함수 호출
		//print2();
		
		function callback(call) {
			//alert(call);
			
			//매개 변수에 저장된 함수를 호출 할 수 있다.-콜백함수(매개변수로 전달되서 호출되는 함수)
			//전달된 함수에따라 다르게 호출될 수 있다.
			call();
		}
		
		callback(print1);
        
        //이런 형태로 많이 사용한다
        //외부함수로 만들어서 호출하는 건 내부함수처럼 호출하는 형태로!!
        //이벤트 핸들러가 주로 이런 형태로 짜여진다 ★★★중요
        callback(function() {
			alert("안녕하세요");
		})
		
	</script>
</body>
</html>

 

📌클로저 함수

: 내부함수를 반환받아 호출하는 함수

3가지의 방법이 존재한다

1.함수를 호출하여 내부함수를 반환받아 저장(= 함수 변수)

var fun = outer(); //fun변수는 outer함수가 저장
fun(); //그렇기 때문에 함수형태로 호출해야한다.

2. 내부함수를 반환받아

outer()(); //변수로 반환받아 사용하는 것이 아니라, 바로 실행

3. 선언할때부터 다 때려박기

   function closure (name) {
        return function () {
            alter("안녕하세요");
        }
   }

   closure("홍길동");
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>클로저 함수(Closure Function)</h1>
	<hr>
	<p>내부함수를 반환받아 호출하는 함수</p>
	
	<script type="text/javascript">
	function outer() {
		function print() {
			alert("outer() 함수 내부에 선언된 print() 함수 호출");
		}	
		
		//print();
		return print;
	}
	
	//방법1-----------------------------
	//함수를 호출하여 내부함수를 반환받아 저장 - 함수변수
	var fun=outer();
	
	//함수변수를 이용하여 함수 호출 - 내부함수 호출(클로저 함수)
	fun();
	
	//방법2-----------------------------
	//내부함수를 반환받아 직접호출
	//=>즉, 변수로 받아 사용하는것이 아니라 바로 실행
	outer()();
	
	
    	//방법3----------------------------
   	 //선언할때부터 다 때려박기
	function closure(name) {
		return function () {
			alert(name + "님, 안녕하세요");
		}
	}
	
	closure("홍길동")();
	
	</script>
</body>
</html>

 


내장함수


📌내장함수 - timer함수

setTimeout 시간경과 후 콜백함수의 명령을 한번만 실행하는 함수
clearTimeout timeoutId로 등록된 setTimeout함수를 초기화
setInterval 시간마다 콜백함수의 명령을 반복실행하는 함수
clearInterval intervalId로 등록된 setInterval함수를 초기화 하는 함수
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>내장함수 - timer 함수</h1>
	<hr>
	
	<!-- setInterval과 clearInterval은 자주 사용된다 -->
	<p>setTimeout(callback,ms) : 시간(ms) 경과 후 콜백함수의 명령을 
	한번만 실행하는 함수 - timeoutId(함수 호출 고유값) 반환</p>
	
	<p>clearTimeout(timeoutId) : timeoutId로 등록된 setTimeout() 함수를
	초기화 처리하는 함수 - setTimeout() 함수 실행 취소</p>
	
	<p>setInterval(callback,ms) : 시간(ms)마다 콜백함수의 명령을 
	반복 실행하는 함수 - intervalId(함수 호출 고유값) 반환</p>
	
	<p>clearInterval(intervalId) : intervalId로 등록된 setInterval() 함수를
	초기화 처리하는 함수 - setInterval() 함수 실행 취소</p>
	
	<script type="text/javascript">
		var intervalId = setInterval(function() {
			alert("시간경과 후 반복실행되는 명령");
		}, 1000);
		
		setTimeout(function() {
			clearInterval(intervalId)
		}, 5000);
		
	</script>
	
</body>
</html>


 

📌내장함수 - encode함수 (인코딩과 디코딩)

  • 쿼리스트링에 전달되는 값을 읽어들이기 위해서 쓴다
  • 폰태그를 사용하면 쓸일이 없음
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>내장함수 - encode 함수</h1>
	<hr>
	<!-- URL 주소는 영문자,숫자,일부 특수문자를 이용하여 작성 -->
	<!-- URL 주소는 QueryString를 사용하여 요청 프로그램에 값을 전달 -->
	<!-- => QueryString은 URL 주소로 표현할 수 없는 문자 포함 -->
	<!-- => URL 주소로 표현할 수 없는 문자를 URL 주소로 인식되도록 부호화 처리하여 전달 -->
	<p>encodeURI(string)과 encodeURIComponent(string) : 문자값을 
	전달받아 부호화 변환하여 반환하는 함수</p>
	<p>decodeURI(string)과 decodeURIComponent(string) : 부호화된 
	문자값을 전달받아 복호화 변환하여 반환하는 함수</p>
	
	<script type="text/javascript">
	var name = "홍길동";
	alert(name);
	
	var encodename = encodeURIComponent(name);
	alert("encodeName = " + encodename);
	
	var decodeName = decodeURIComponent(encodename);
	alert(decodeName);
	</script>
</body>
</html>

 

📌내장함수 - eval함수★

  • 문자값을 객체로 바꿀때 많이 쓴다 -> ajax에서 많이 쓴다고 한다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>내장함수 - eval함수</h1>
	<hr>
	<p>eval(String) : 문자값을 전달받아 자바스크립트코드로 변환하여 반환하는 함수
	<script type="text/javascript">
		var text = "20 + 10 ";
		//alert(text);
		
		alert(eval(text));//출력 30 -> text에 저장되어 있는 코드가 자바스크립트 코드로 변환되어
						//계산되기때문에 30이 출력된다
		var operation = prompt("사칙연산을 입력해주세요");
		alert("연산결과 = " + eval(operation));
		
		var fun = "function() {alert('익명함수 호출')}";
		alert(typeof(fun));
		
		//함수가 아니므로 함수처럼 호출 할 경우 에러가 발생한다
		//fun();
		
		//문자값을 자바스크립트 코드로 변환해서 처리
		//=> 선언문은()기호를 이용하여 먼저 처리되도록설정
		alert(typeof(eval("("+fun+")")));
		eval("("+fun+")")();
		
		
		
	</script>

</body>
</html>

 

📌내장함수 -  isNaN함수

  • 전달값이 숫자로만 구성된 경우 false를 반환
    전달값이 숫자로만 구성되지 않은 경우 true를 반환
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>내장함수 - isNaN 함수</h1>
	<hr>
	<p>isNaN(value) : 전달값이 숫자로만 구성된 경우 false 반환,숫자로만
	구성되지 않은 경우 true를 반환하는 함수</p>

	<script type="text/javascript">
		var text = "123";
		if(isNaN(text)){
			alert("NaN(Not a Number)이 맞습니다 - 숫자로만 구성되지 않은 값)")
		}else {
			alert("NaN(Not a Number)이 맞습니다 - 숫자로만 구성되지 않은 값)")
		}
	</script>
</body>
</html>

 

📌내장함수 - isFinite함수

  • 전달값이 무한대인 경우 false를 반환
    유한대인 경우 true를 반환
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>내장함수 - isFinite 함수</h1>
	<hr>
	<p>isFinite(value) : 전달값이 무한대인 경우 false 반환, 유한대인 
	경우 true를 반환하는 함수</p>
	
	<script type="text/javascript">
	//alert(10/3);
	//alert(10/0);//Infinity : 무한대
	
	//var num1=20, num2=10;
	var num1=20, num2=0;
	
	if(isFinite(num1/num2)) {
		alert("결과 = "+(num1/num2));
	} else {
		alert("0으로 나눌 수 없습니다.");
	}
	</script>
</body>
</html>

 

📌내장함수 - pasre함수

parseInt 전달값을 정수값으로 변환하여 반환하는 함수
parseFloat 전달값을 실수값으로 변환하여 반환하는 함수
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>내장함수 - parse 함수</h1>
	<hr>
	<p>parseInt(value) : 전달값을 정수값으로 변환하여 반환하는 함수</p>
	<p>parseFloat(value) : 전달값을 실수값으로 변환하여 반환하는 함수</p>
	
	<script type="text/javascript">
	var result=50/3;
	//alert("결과 = "+result);
	
	var result = 50/3;
	//alert("결과 = " + parseInt(result));
	
	//parseInt(value[,radix]) : 진수형식의 문자값을 전달받아 10진수
	//정수값으로 변환하여 반환하는 함수
	//=>진수가 생략된 경우 10진수로 자동처리
	//alert(parseInt(123,8));
	//alert(parseInt("abc",16));	
	
	var num = "100.5";
	//alert(num + 200); //결과 : 문자값(문자 결합)
	
	//Number() : 전달받은 문자값을 숫자값으로 변환하여 반환하는 함수
	alert(Number(num + 200));//결과 :100.52
	alert(parseFloat(num)+200); //결과 : 실수값 = 300.5
	alert(parseInt(num)+200); //결과 : 정수값 = 300
	
	var num1 = "100abc";
	alert(Number(num1)+200);//결과 : NaN
	alert(parseInt(num1) + 200);//결과 : 300 - 앞부분 숫자만 잘라내어 정수값으로 반환
								//만약 var값이 "abc100"이라면 NaN이 나온다
	</script>
</body>
</html>

 


자바스크립트의 객체


[객체를 만드는 방법]

  • 빈 객체를 만들어서 계속 추가/삭제하는 방법
  • class를 만들어서 계속 추가/삭제 하는 방법

 

📌자바스크립트 객체

  • JSON(JavaScript Object Notation) : 자바스크립트 객체 표기법
  • 참고로 배열은 대괄호를 사용하여 표기한다
  • { }기호를 사용하여 오브젝트 객체를 표현한다
  • var student = new Object();로 객체를 만들어 줄수도 있지만
  • var student = {};도 가능하다
  • 객체 요소(속성과 메소드)는 . 연산자를 이용하여 접근할 수 있다
  • 계속 객체를 수정할 수 있기 때문에 동적인 언어라고 표현한다
  • 하지만 객체의 사용갯수가 많아지면 속도가 느려지기 떄문에 오히려 자바가 좋을 수 도 있다는 단점도 존재!

자바스크립트에서 객체란, 속성과 메소드의 모임을 의미한다.
브라우저를 하나의 객체로 표현하여 프로그램을 작성한다. BOM - 객체관점
그렇기 때문에 1. 객체를 생성하고 2. 객체의 요소(속성과 메소드)를 추가 변경 삭제하여 사용한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>자바 스크립트 객체</h1>
	<hr>
	<p>자바 스크립트 객체 : 속성(Property)과 메소드의 모임 </p>
	<p>자바 스크립트는 브라우저를 하나의 객체로 표현하여 프로그램 작성 : BOM(Browser Object Model) -객체 관점 프로그램 </p>
	
	<p>자바 스크립트는 오브젝트 클래스 함수를 이용하여 
		객체를 생성하고 객체의 요소(속성과 메소드)를 추가 변경 삭제 하여 사용한다 </p>
	<p>Object클래스 함수 : 요소가 없는 객체를 생성하기 위한 함수 </p>
	
	<script type="text/javascript">
	//자바스크립트 객체 생성 방법
	//형식) var 변수명 = new 클래스 함수(값, ...)
	
	//Object클래스 함수로 오브젝트 객체를 생성하여 변수에 저장
	//var student = new Object(); //속성이나 메소드가 하나도 없는 객체를 스튜던트 변수에 만들어서 저장하라
	//alert(typeof(student)); //결과 : object Object => 오브젝트 클래스를 가지고 만든 오브젝트 객체다 라는 뜻
	
	//{}기호를 사용하여 Object객체를 표현 - JSON(JavaScript Object Notation)
	var student = {};
	
	//객체 요소(속성과 메소드)는 . 연산자를 이용하여 접근할 수 있다 
	//새로운 객체 요소가 사용될 경우 객체의 요가 추가가 된다
	
	//객체 요소에 값  저장할 경우 속성으로 인식되어 처리 
	//=>객체 속성은 값을 저장하는 객체 요소
	student.num = 100//속성 추가
	student.name = "홍길동";
	student.address = "서울시 강남구";
	
	//객체 속성값을 출력
	alert("학번 = " + student.num +" 이름 = " + student.name + " 주소 = " + student.address);
	//객체에 존재하지 않는 요소를 사용할 경우 undefinded발생
	//alert("전화번호" + studnet.phone); //없는 객체 속성을 불러오면 undefined(=값이 없다)라고 뜬다
	
	//객체 요소에 함수를 저장할 경우 메소드로 인식되어 처리가 된다
	student.display = function() {
		//객체 요소를 메소드에서 사용할 경우 반드시 this키워드를 사용해야 한다
		//=> this를 사용하지 않을 경우 일반 변수로 인식되어 처리된다
		//객체 메소드에서 현재 객체를 표현하기 위한 키워드
		alert("학번 = " + this.num +" 이름 = " + this.name + " 주소 = " + this.address);
		
	}
	
	student.display();
	
	</script>
	
</body>
</html>

 

 

📌JSON을 이용하여 객체를 만드는 방법

//JSON을 이용할 경우 객체 생성 시 요소 추가 기능
//형식) var 변수명 = ("요소명": "값", "요소명" : "함수");
	
var student = {"num" : 1000, "name" : "홍길동" , address : "서울시 강남구", "display": function(){
	alert("학번 = " + this.num +" 이름 = " + this.name + " 주소 = " + this.address);
}};

//함수 호출
student.display();

alert("학번 = " + student.num +" 이름 = " + student.name + " 주소 = " + student.address);
	
//배열로 객체의 속성에 접근할 수 있다(단, 메소드는 접근 불가능)
alert("학번 = " + student["num"] +" 이름 = " + student["name"] + " 주소 = " + student["address"]);

//delete(객체 변수.요소명) : 객체의 요소를 제거하는 함수
delete(student.address);//address속성을 삭제해달라.

 

📌in연산자와 with함수

  • in 연산자 : 객체 요소를 확인하는 연산자
                   → for문을 이용할 수 있다.
  • with 연산자 : 객체 요소를 변수처럼 사용할 수 있는 기능을 제공하는 함수
//in연산자 : 객체 요소를 확인하는 연산자
//형식) "요소명" in 객체 변수
//=> 객체에 존재하는 요소가 아닌 경우 false반환 요소인 경우 true를 반환
alert("num" in student);//true반환
alert("phone" in student); //false로 반환

//in연산자를 이용하여 for구문을 이용한 반복처리 
//형식) for(변수명 in 객체변수)
//=> 객체의 요소명을 반환받아 변수에 저장하는 기능을 반복처리하는 명령
for(property in student){
    alert(property + " = " + student[property]);
}

//with(object) : 객체 요소를 변수처럼 사용할 수 있는 기능을 제공하는 함수
with(studnet){
	alert("학번 = " + num +" 이름 = " + name + " 주소 = " + address);
}

 

 

📌class함수 → 객체를 다수 개 만들 때 사용

  • 객체를 하나 만들면 위와같은 방법이 편하지만 객체를 다수개를 만들때에는 힘드므로 class함수를 생성
  • 일종의 생성자라고 생각하면 된다.
  • 요소의 추가삭제도 가능하다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>클래스 함수</h1>
	<hr>
	<p>클래스 함수 : 객체를 생성하기 위한 함수 </p>
	<p>클래스 함수는 new연산자로 호출하여 객체를 생성</p>
	<p>동일한 형태의 객체를 쉽게 생성하기 위한 클래스 함수 선언 
		-생산성 향상 및 유지보수의 효율성 증가</p>
		
	<script type="text/javascript">
	//클래스 함수 선언-매개 변수로 값을 전달받아 속성을 선언
	function Student(num, name, address) {
		//객체의 요소는 반드시 this키워드를 사용하여 표현
		this.num = num;
		this.name = name;
		this.address  = address;
        
        //메소드는 실제 이렇게 만들지 않음
        //=> 객체들마다 동일한 기능의 메소드를 가지고 있을 필요가 없기 때문임
		this.display = function(){
			alert("학번 = " + this.num +" 이름 = " + this.name + " 주소 = " + this.address);
		}
	}
	
	//클래스 함수를 이용하여 객체를 생성
	var student1 = new Student(1000, "홍길동", "서울시 강남구");
	var student2 = new Student(1000, "임꺽정", "서울시 종로구");
	var student3 = new Student(1000, "전우치", "서울시 구로구");
	
	student1.display();
	student2.display();
	student3.display();

	</script>
	
</body>
</html>

 

📌프로토타입 메소드

  • 클래스 함수로 객체를 생성할 경우, 클래스 함수 안에 선언된 요소는 객체마다 따로 생성이된다.
  • 하지만 속성은 객체마다 따로 생성되는 것이 맞지만, 메소드는 객체마다 생성되는 것은 비효율적이다.
  • 메소드는 생성된 객체의 갯수와 상관없이 하나만 생성되어 모든 객체가 공유하여 사용하는 것을 권장한다.
  • 이것을 프로토타입 메소드라고 한다.

 두가지의 방법이 존재

1. 메소드마다 따로따로 선언

2. 한번에 선언

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>프로토 타입 메소드</h1>
	<hr>
	<p>클래스 함수로 객체를 생성할 경우 클래스 함수 안에 선언된 요소는 객체마다 따로 생성이 된다 </p>
	<p>속성은 객체마다 따로 생성되는 것이 맞지만, 메소드는 객체마다 생성되는 것은 효율적이지 X </p>
	<p>메소드는 생성된 객체의 객수에 상관없이 하나만 생성되어 모든 객체가 공유하여 사용하는 것을 권장
		이것을 프로토타입 메소드라고 한다 </p>
	
	<script type="text/javascript">
	//클래스 함수는 속성만 선언
	function Student(num , name, address) {
		this.num = num;
		this.name = name;
		this.address = address;
		
		//클래스 함수에 선언된 메소드는 객체마다 따로 존재하게 된다
		/*
			this.display = function(){
				alert("학번 = " + this.num +" 이름 = " + this.name + " 주소 = " + this.address);
			}
		*/
	}
	
	//클래스 함수의 프로토 타팁 메소드 추가 - 모든 객체가 공유하여 사용하는 메소드
	Student.prototype.display = function(){
		alert("학번 = " + this.num +" 이름 = " + this.name + " 주소 = " + this.address);
	}
	
	Student.prototype.setValue = function(num, name, address){
		this.num = num;
		this.name = name;
		this.address = address;
	}
	
	//프로토타입 메소드를 여러개 추가할 경우 오브젝트 객체 형태로 추가
	Student.prototype = {
		"display" : function(){
			alert("학번 = " + this.num +" 이름 = " + this.name + " 주소 = " + this.address);
		},
		
		"setValue" : function(){
			this.num = num;
			this.name = name;
			this.address = address;
		}
			
	};
	
	//var student1 = new Student(1000, "홍길동", "서울시 강남구");
	//var student2 = new Student(1000, "임꺽정", "서울시 종로구");
	//var student3 = new Student(1000, "전우치", "서울시 구로구");
	
	var student=new Student(1000, "홍길동", "서울시 강남구");
	student.display();
	
	student.setValue(2000, "임꺽정", "수원시 팔달구");
	student.display();
	
	</script>

</body>
</html>

 

 

📌내장클래스 함수 - Object

  • 오브젝트 객체가 패키지의 역할을 수행한다
  • 오브젝트 객체의 속성으로 만들어버린다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<h1>내장 클래스 함수 - Object</h1>
	<hr>
	<p>Object 클래스 함수 : 요소가 없는 객체를 생성하기 위한 클래스 함수</p>
	<p>필요한 속성과 메소드를 추가하여 사용</p>
	
	<script type="text/javascript">
	/*
	var student=new Object();
	//alert(student);
	
	//객체 속성 추가
	student.num=1000;
	student.name="홍길동";
	student.address="서울시 강남구";
	
	//alert("학번 = "+student.num+", 이름 = "+student.name+", 주소 = "+student.address);

	//객체 메소드 추가
	student.display=function() {
		alert("학번 = "+this.num+", 이름 = "+this.name+", 주소 = "+this.address);
	}
	
	student.display();
	*/
	
	//JSON를 이용하여 Object 객체 생성 - 객체 생성시 요소 추가 가능
	var student={"num":1000,"name":"홍길동","address":"서울시 강남구"
			,"display":function() {
				alert("학번 = "+this.num+", 이름 = "+this.name+", 주소 = "+this.address);
			}
	};
	
	//alert("학번 = "+student.num+", 이름 = "+student.name+", 주소 = "+student.address);
	student.display();
	
	//Object개체로 패키지 역할 수행
	var site = new Object();//var site = {};같음
	site.itwill = new Object();
	
	//객체의 속성으로 함수를 만들어버림
	//이렇게 사용하면 오버라이트가 될 일이 없게 된다
	//일종의 자바에서 패키지의 역할을 한다고 생각하면된다
	site.itwill.Studnet = function(num, name, address){
		this.num = num;
		this.name = name;
		this.address = address;
	}
	
	site.itwill.Student.prototype.display = function() {
		alert("학번 = "+this.num+", 이름 = "+this.name+", 주소 = "+this.address);
	}
	
	var student = new site.itwill.Student(1000,"홍길동","서울시 강남구");


	</script>
</body>
</html>

 

 

📌number클래스 함수

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Number클래스 함수</h1>
	<hr>
	<p>숫자값을 저장한 객체를 생성하기 위한 클래스 함수 </p> 

	<script type="text/javascript">
	/*
	var num = new Number(100);
	var num = new Number("100");//위에와 결과가 같게 나온다
	
	//Number.toString(redix) : 객체에 저장된 숫자값을 원하는 진수의 문자값으로 변환하여 반환하는 메소드
	//=> 진수를 전달하지 않을 경우 10진수의 문자값으로 변환하여 반환
	alert(num.toString(2));//2진수로 출력
	alert(num.toString(8));//8진수로 출력
	alert(num.toString());//아무것도 입력하지 않으면 10진수로 출력
	
	//객체변수를 출력할 경우 toString()메소드가 자동 호출
	//=> 객체에 저장된 정수값을 10진수의 문자값으로 출력할 경우 생략하여 사용한다
	alert(num);//toString을 사용하지 않아도 된다.
	*/
	
	var num = 100;
	alert(typeof(num));//자료형 : number형 - 객체가 아님
	
	//자바스크립트는 모든 값을 객체 관점으로 처리
	//=> number자료형은 내부적으로 Number객체로 처리 
	//=> Number자료형의 변수도 Number객체의 메소드호출이 가능하다
	alert(num.toString()); //자료형이 숫자형인데도 객체메소드를 사용할 수 있다.
	alert(num.toString(2)); //얘도 실행됨
	
	//변수의 자료형이 Object타입이 아니므로 요소 추가가 불가능하다
	num.display() = function() {
		alert("display 메소드 호출")
	}
	
	 num.display(); //함수가 아니라는 에러가 뜸
	 
	 var num = new Number(100);
	 alert(typeof(num)); //결과 : 오브젝트
	 
	 //변수의 자료형이 Object타입이므로 이제는 요소를 추가할 수 있게 된다.
	 num.display() = function() {
			alert("display 메소드 호출")
	}
	 
	 var num = "100";
	 alert(typeof(num)); //결과 : String
	 //문자값을 Number클래스함수에 전달하여 숫자값을 반환
	 alert(num + 200); //결과값이 100200으로 보이게 된다.
	
	 alert(Number(num) + 200); //결과 : 300이 출력
	 
	 var num = 12.3456789;
	 //alert("num =" + num ); 
	 //Mumber.toFixed(number) : 전달된 숫자값의 자릿수 위치의 소수점까지 값을 반올림 하여 반환하는 메소드
	 //=> 숫자값은 0부터 20까지만 가능하다(반올림된다)
	alert("num = " + num.toFixed(0)); //결과 : 12
	alert("num = " + num.toFixed(1)); //결과 : 12.3
	alert("num = " + num.toFixed(2)); //결과 : 12.35
	
	alert("최대 숫자값 = " + Number.MAX_VALUE);
	alert("최대 숫자값 = " + Number.MIN_VALUE);
	 
	</script>
	 
</body>
</html>

 

저작자표시 비영리 동일조건 (새창열림)

'💻 수업정리 (2020) > JavaScript' 카테고리의 다른 글

[7/21] jQuery  (0) 2020.07.21
[7/20] 자바스크립트 last  (0) 2020.07.20
[7/17] 자바스크립트 기초4  (0) 2020.07.17
[7/16] 자바스크립트 기초 3  (0) 2020.07.16
[7/14] 자바스크립트  (0) 2020.07.14
    '💻 수업정리 (2020)/JavaScript' 카테고리의 다른 글
    • [7/20] 자바스크립트 last
    • [7/17] 자바스크립트 기초4
    • [7/16] 자바스크립트 기초 3
    • [7/14] 자바스크립트
    주다람
    주다람
    신입 어린이 -> 주니어개발자 성장중

    티스토리툴바