μƒˆμ†Œμ‹

Languages/Java Script

[Js] κ°’μœΌλ‘œμ„œμ˜ ν•¨μˆ˜μ™€ 콜백 | 콜백 | 비동기 처리

  • -
λ°˜μ‘ν˜•

 

ν•΄λ‹Ή ν¬μŠ€νŒ…μ€ "μƒν™œμ½”λ”©"의 μ΄κ³ μž‰ λ‹˜μ˜ κ°•μ˜λ₯Ό 기반으둜 올린 κ²Œμ‹œκΈ€ μž…λ‹ˆλ‹€.

상업적인 μš©λ„κ°€ μ•„λ‹Œ, 개인 곡뢀 정리 λͺ©μ μœΌλ‘œ μ˜¬λ¦¬λŠ” κΈ€μž„μ„ 미리 μ•Œλ¦½λ‹ˆλ‹€.

 

 

 

 


κ°’μœΌλ‘œμ„œμ˜ ν•¨μˆ˜

JavaScriptμ—μ„œλŠ” ν•¨μˆ˜λ„ 객체닀. λ‹€μ‹œ λ§ν•΄μ„œ μΌμ’…μ˜ 값이닀.

(μ–΄λ– ν•œ 값을 λ³€μˆ˜μ— 담을 수 μžˆλ‹€. ν•¨μˆ˜ λ˜ν•œ λ³€μˆ˜μ— 담을 수 μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜λ„ μΌμ’…μ˜ 값이 λ˜λŠ”κ²ƒμ΄λ‹€.)

거의 λͺ¨λ“  μ–Έμ–΄κ°€ ν•¨μˆ˜λ₯Ό 가지고 μžˆλ‹€. JavaScript의 ν•¨μˆ˜κ°€ λ‹€λ₯Έ μ–Έμ–΄μ˜ ν•¨μˆ˜μ™€ λ‹€λ₯Έ 점은 ν•¨μˆ˜κ°€ 값이 될 수 μžˆλ‹€λŠ” 점이닀.

 

λ‹€μŒ 예제λ₯Ό ν†΅ν•΄μ„œ κ·Έ 의미λ₯Ό μ•Œμ•„λ³΄μž.

<script>

	function a(){}
    //var a = function() {}

</script>

μœ„ 두 μ½”λ“œλŠ” 같은 μ˜λ―Έμ΄λ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œ ν•¨μˆ˜ aλŠ” λ³€μˆ˜ a에 담겨진 값이닀. λ˜ν•œ ν•¨μˆ˜λŠ” 객체의 κ°’μœΌλ‘œ 포함될 수 μžˆλ‹€. 

 

<script>
    a = {
        b:function(){
        }
    };
</script>

bλŠ” μΌμ’…μ˜ λ³€μˆ˜μ˜ 역할을 ν•˜λŠ” 것이닀. 이런 역할을 ν•˜λŠ” 것을 속성(property)라고 ν•œλ‹€.

bλŠ” key , 그의 값은 function이라고 ν•  λ•Œ,μ΄λŸ¬ν•œ function  즉 ν•¨μˆ˜λ₯Ό λ©”μ†Œλ“œ 라고 ν•˜λŠ” 것이닀.

일반적으둜 μ •μ˜λœ ν•¨μˆ˜λŠ” 'ν•¨μˆ˜'라 ν•˜κ³ , μ΄λ ‡κ²Œ μœ„μ™€ 같이 객체의 속성 κ°’μœΌλ‘œ 담겨진 ν•¨μˆ˜λ₯Ό "λ©”μ†Œλ“œ(method)"라고 ν•œλ‹€.

<script>
    function cal(func, num){
        return func(num)
    }
    function increase(num){
        return num+1
    }
    function decrease(num){
        return num-1
    }
    alert(cal(increase, 1));
    alert(cal(decrease, 1));
</script>

 

11행을 μ‹€ν–‰ν•˜λ©΄ ν•¨μˆ˜ increase와 κ°’ 1이 ν•¨μˆ˜ cal의 인자둜 μ „λ‹¬λœλ‹€.

ν•¨μˆ˜ cal은 첫번째 인자둜 μ „λ‹¬λœ increaseλ₯Ό μ‹€ν–‰ν•˜λŠ”λ° 이 λ•Œ λ‘λ²ˆμ§Έ 인자의 값이 1을 인자둜 μ „λ‹¬ν•œλ‹€.

ν•¨μˆ˜ increase은 κ³„μ‚°λœ κ²°κ³Όλ₯Ό λ¦¬ν„΄ν•˜κ³  cal은 λ‹€μ‹œ κ·Έ 값을 λ¦¬ν„΄ν•œλ‹€.

 

 

 

μœ„ 뢀뢄이 이해가 잘 μ•ˆλœλ‹€λ©΄ μ•„λž˜ μ˜μƒμ„ μ°Έκ³ ν•˜κΈΈ λ°”λž€λ‹€.

www.youtube.com/watch?v=zGBkPTwydeg&feature=emb_logo

ν•¨μˆ˜λŠ” ν•¨μˆ˜μ˜ 리턴 κ°’μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.

<!DOCTYPE html>
<html>
<head>
	<title>haha</title>
</head>
<body>
<script type="text/javascript">
  function cal(mode){ //modeλŠ” calν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨κ»˜ κ°’ 전달 ν•΄μ€˜μ•Όν•¨
  	var funcs = {//funcsλŠ” 객체
  		'plus' : function(left, right){return left + right},
  		'minus' : function(left, right){return left - right}
  	}
  	return funcs[mode];
  }
  alert(cal('plus')(2,1)); // calν•¨μˆ˜μ— 인자 plusλ₯Ό μ£Όκ³ , κ·Έ μ•ˆμ— 객체 쀑 plus의 ν•¨μˆ˜λ₯Ό 호좜 -> return 2+1 = 3
  alert(cal('minus')(2,1)); // λ§ˆμ°¬κ°€μ§€μž„. minusμ΄λ―€λ‘œ 2-1 =1 좜λ ₯
</script>


</body>
</html>

 

 

λ‹Ήμ—°νžˆ λ°°μ—΄μ˜ κ°’μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.

<script>
    var process = [
        function(input){ return input + 10;},
        function(input){ return input * input;},
        function(input){ return input / 2;}
    ];
    var input = 1;
    for(var i = 0; i < process.length; i++){
        input = process[i](input);
    }
    alert(input);
</script>

 

"λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 리턴 κ°’ λ“±μ˜ μš©λ„λ‘œ μ‚¬μš©λ˜λŠ” 것을 ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” first-class citizen(object ..)라고 λΆ€λ₯Έλ‹€."

 

 

콜백

κ°’μœΌλ‘œμ¨μ˜ ν•¨μˆ˜μ™€ λ°€μ ‘ν•œ 관계가 μžˆλ‹€.

 

 

 

 

처리의 μœ„μž„

 

κ°’μœΌλ‘œ μ‚¬μš©λ  수 μžˆλŠ” νŠΉμ„±μ„ μ΄μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ 인자둜 ν•¨μˆ˜λ‘œ 전달할 수 μžˆλ‹€.

κ°’μœΌλ‘œ μ „λ‹¬λœ ν•¨μˆ˜λŠ” 호좜될 수 있기 λ•Œλ¬Έμ— 이λ₯Ό μ΄μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ λ™μž‘μ„ μ™„μ „νžˆ λ°”κΏ€ 수 μžˆλ‹€.

 

인자둜 μ „λ‹¬λœ ν•¨μˆ˜ sortNumber의 κ΅¬ν˜„μ— λ”°λΌμ„œ sort의 λ™μž‘λ°©λ²•μ΄ μ™„μ „νžˆ λ°”λ€Œκ²Œ λœλ‹€.

 

μ•„λž˜ μ½”λ“œλ₯Όλ³΄λ©΄, μ›λž˜ 기본적으둜 λ™μž‘ν•˜λŠ” sortλŠ” λ¬Έμžμ—΄λ‘œ 비ꡐ가 된 것인지 μ΄μƒν•œ μˆœμ„œλŒ€λ‘œ 좜λ ₯이 λœλ‹€.

 

 

 

 

 

μ œλŒ€λ‘œ 정렬을 ν•˜κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό λ°”κΎΈμ–΄ 보면 μ•„λž˜μ™€ κ°™λ‹€.

<!DOCTYPE html>
<html>
<head>
	<title>haha</title>
</head>
<body>
<script type="text/javascript">
	var numbers = [20,10,9,8,7,6,5,4,3,2,1];
	var sortfunc = function(a,b){//a,bλŠ” μœ„ 숫자λ₯Ό 비ꡐ할 인자.
		if(a > b){
			return 1;
		}else if(a < b){
			return -1;
		}else {
			return 0;
		}

	}
	console.log(numbers.sort(sortfunc));
</script>


</body>
</html>

κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

if문으둜 return값을 ꡬ뢄 지어 μ£ΌλŠ” κ²ƒλ§ŒμœΌλ‘œλ„ sort()κ°€ 기쀀에 따라 값을 λΉ„κ΅ν•΄μ£ΌλŠ” 것이닀.

 

 

κ·Έλ ‡λ‹€λ©΄ λ”μš± κ°„κ²°ν•œ μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ 보자!

<!DOCTYPE html>
<html>
<head>
	<title>haha</title>
</head>
<body>
<script type="text/javascript">
	var numbers = [20,10,9,8,7,6,5,4,3,2,1];
	var sortfunc = function(a,b){//a,bλŠ” μœ„ 숫자λ₯Ό 비ꡐ할 인자.
	return a - b; //정렬을 μ—­μˆœμœΌλ‘œ ν•˜κ³  μ‹Άλ‹€λ©΄ b-aλ₯Ό ν•΄μ£Όλ©΄ λœλ‹€.
	
	}
	console.log(numbers.sort(sortfunc));
</script>


</body>
</html>

μˆ«μžκ°€ μ•„λ‹ˆλΌ 문자라 ν•˜λ”λΌλ„, ν•¨μˆ˜λ‘œ μœ μž…λ˜λŠ” μΈμžλ“€μ„ 각자의 μ •λ ¬μ˜ 기쀀에 따라 음수,μ–‘μˆ˜,0으둜 λ‚˜λˆ„μ–΄μ£Όλ©΄

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” κ·Έ 기쀀에 따라 정렬을 ν•  수 μžˆλ‹€.

 

μœ„ λ§₯λ½μ—μ„œ sortfuncλΌλŠ” ν•¨μˆ˜κ°€ λ°”λ‘œ "μ½œλ°±ν•¨μˆ˜"κ°€ λ˜λŠ” 것이닀.

 

κ°’μœΌλ‘œμ¨ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— κ°’ μ „λ‹¬λ‘œ 인해 μ™„μ „νžˆ κ·Έ 값을 λ°”κΏ€ 수 μžˆλŠ” 것이 λ°”λ‘œ "콜백"이닀.

콜백이 κ°€λŠ₯ν•œ 것은 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜κ°€ "κ°’"이기 λ•Œλ¬Έμ— κ°€λŠ₯ν•œ 것이닀.

 

 

μ½œλ°±μ€ 비동기 μ²˜λ¦¬μ—λ„ 맀우 μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.

 

 

 

비동기 처리

 

μ‹œκ°„μ΄ μ˜€λž˜κ±Έλ¦¬λŠ” μž‘μ—…μ΄ μžˆμ„ λ•Œ 이 μž‘μ—…μ΄ μ™„λ£Œλœ 후에 μ²˜λ¦¬ν•΄μ•Ό ν•  일을

콜백으둜 μ§€μ •ν•˜λ©΄ ν•΄λ‹Ή μž‘μ—…μ΄ 끝났을 λ•Œ 미리 λ“±λ‘ν•œ μž‘μ—…μ„ μ‹€ν–‰ν•˜λ„λ‘ ν•  수 μžˆλ‹€.

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ΄λŸ¬ν•œ λΉ„λ™κΈ°μ²˜λ¦¬μ— μ‚¬μš©λ˜λŠ” 것을 Ajax라고 ν•œλ‹€.(asynchronous javascript and xml)

이 기술둜 인해, 웹은 λ‹¨μˆœνžˆ λ¬Έμ„œμ—μ„œ λ²—μ–΄λ‚˜μ„œ λ‹€μ–‘ν•œ λ™μž‘(클릭 μ‹œ μƒˆ μ›Ή νŽ˜μ΄μ§€κ°€ μƒμ„±λ˜λŠ” 것..)을 ν•  수 μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ°œμ „ν•  수 μžˆμ—ˆλ‹€.

 

 

λ‹€μŒ μ½”λ“œλŠ” 일반적인 ν™˜κ²½μ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•Šκ³  μ„œλ²„ ν™˜κ²½μ—μ„œλ§Œ λ™μž‘ν•œλ‹€. λ™μ˜μƒμ„ μ°Έκ³ ν•œλ‹€.

 

 

 

 

 

datasource.json.js

<script>
    {"title":"JavaScript","author":"egoing"}
</script>

demo1.html

<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
<script type="text/javascript">
    $.get('./datasource.json.js', function(result){
        console.log(result);
    }, 'json');
</script>
</body>
</html>

 

 

ν˜„μž¬ κ°•μ˜λ₯Ό λ“£λŠ” λ™μ•ˆμ—λŠ” jsonκ³Ό ajax jquery등을 100% 이해할 ν•„μš” μ—†λ‹€.

 

 

 

www.youtube.com/watch?v=NDFjwybbong&feature=emb_logo

 

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.