본문 바로가기
CodeIt_Sprint/비동기_자바스크립트

(1)비동기_자바스크립트_Argument, Parameter의 차이, CallBack메소드 작성방법2가지(구현부는 같으나 , 호출시 정석, ArrowFunction), setTimeout + callback함수 응용, 비동기의 대표적 예시

by 코잼민 2024. 12. 1.

● 이론0_비동기_자바스크립트를 배우기 전, Argument, Parameter의 차이

○ 이론적 정의 차이 :

  • Argument : 함수 호출을 할 때, 호출한 함수의 매개변수에 대입한 값
  • Parameter : 함수 구현 시, 변수들 입력한 매개인자 값

○ 예시로 파악하기 :

function add(x, y) { // x, y : Parameter
  return x + y;
}

add(1, 2); // 1, 2 : Argument

● 이론1 : CallBack 메소드

○ 정의 : 함수의 파라미터(함수 구현 작성 시) 안에 메소드가 들어가있는 형식으로, 함수 호출시에는 Argument에 다른 함수를 대입하는 함수형식을 CallBack method라 한다.

간단 예시

function SayHello()
{
	console.log('안녕 시발아?');
}

function PrintHello(func)//콜백함수 구현 : Parameter는 그냥 변수로 
{
	console.log('인사를 할 것이다.');
    func(); //Parameter를 함수만 넣아야 작동됨
}

PrintHello(SayHello);//Argument로 함수 대입 시, 이름만 적고 ()는 생략한다.

○ 방법은 2가지 형식이 있다.

▶ 방법1_ 위의 예시 처럼, 콜백함수의 Parameter에  외부 다른 메소드 삽입 방법

function SayHello(name){
	console.log(`안녕 시발아? 나는 ${name}인데?`);
}

//순서1_Parameter에 매개 함수안에 넣을 매개변수를 같이 넣기
function PrintHello(func, name)
{
	console.log('인사를 할 것이다.');
   	func(name);//Parameter 호출
}

PrintHello(SayHello,'티나핑');//순서2

 

▶ 방법2_ 콜백 함수의 Parameter ArgumentArrow Function으로 직접 구현 (함수 구현시, 함수 호출 시)

//함수 구현부, Parameter는 위의 방법과 같다.
function PrintHello(func)
{
	console.log('인사를 할 것이다.');
   	func();//Parameter 호출
}

//Argument에 직접 구현
PrintHello(()=>{
	console.log("안녕 시발아?");
});

● 이론2_ CallBack 함수 + 파라미터 전달 

○ 순서 :

  • 순서1_ CallBack함수의 Parameter에 매개인자함수에 넣을 Parameter를 같이 넣기., 구현
  • 순서2_ 호출시, Argument에 추가해서, 호출

Ex_

function SayHello(name){
	console.log(`안녕 시발아? 나는 ${name}인데?`);
}

//순서1_Parameter에 매개 함수안에 넣을 매개변수를 같이 넣기
function PrintHello(func, name)
{
	console.log('인사를 할 것이다.');
   	func(name);//Parameter 호출
}

PrintHello(SayHello,'티나핑');//순서2

○ Arrow Function으로 CallBack함수 전달하기

- 구현부는 방법1과 같다는 점 기억!

function PrintHello(func,name)//구현부
{
	console.log('인사를 할 것이다.');
    func(name);
}

PrintHello((name)=>{
	console.log(`안녕 시발아? 나는 ${name}인데?`);
},'티나핑');//Arrow Function

◎ 연습문제 :

forEach() 함수는 배열 array와 콜백 callback을 파라미터로 받아서 array의 모든 요소에 대해 callback을 실행합니다.

  1. 배열의 요소를 출력하는 콜백을 전달해 주세요. Arrow Function을 사용하세요.
  2. 배열의 요소를 대문자로 출력하는 콜백을 전달해 주세요. function 키워드로 함수를 선언한 뒤에 콜백으로 전달하세요.

※참고_Array객체 파라미터 메소드 forEach(배열,(word)=>{console.log(word)}); //배열에 인덱스 왼쪽부터 하나씩 출력하는 메소드

- 답 : 

function forEach(Array, func) //CallBack함수인, forEach 구현부
{
	for(let str of Array)
    {
    	func(str);
	}

}

const words = ['JavaScript', 'Java', 'Python'];

//배열의 하나씩 출력
forEach(words,(word)=>{
	console.log(word);
});

//대문자로 변환 출력
forEach(words,(word)=>{
	console.log(word.toUpperCase());
});

● 이론3_ CallBack함수의 활용의 대표적 예시 => setTimeOut() 메소드

○ setTimeout(매개인자1 : CallBack메소드 , 매개인자2: 몇밀리초 후에 callBack함수를 호출할지의 값);

○ 사용 예시

console.log('1');

setTimeout(()=>{console.log('2')},3000);//3초후에 callback함수 호출

console.log('3');

 

● 이론4_ setTimeout()와 callBack함수가 비동기 실행의 대표적 예시다.

: 아래의 사진은 setTimout()메소드가 비동기 실행함수일 경우와 동기 실행함수일 경우의 코드 수행 과정을 시간 그래프로 나타낸 것이다.

◎ 연습문제 :

setTimeout() 함수는 사실 2개 이상의 아규먼트를 받을 수 있습니다.

setTimeout(callback, delay, arg0, arg1, ...);

첫 번째 아규먼트 callback은 실행할 콜백, 두 번째 아규먼트 delay는 타임아웃 시간(밀리초 단위)이었죠? 그 이후의 아규먼트들은 callback의 아규먼트로 전달됩니다.

setTimeout(callback, delay, foo);

예를 들어 위와 같은 코드를 실행하면 delay 만큼의 시간이 지나고 callback(foo) 함수가 실행되는 거죠.

템플릿 파일에는 이전에 사용했던 sayHello() 함수가 있는데요. 이 함수를 이용해서 아래와 같은 출력 결과를 만들어 보세요. delay는 2초로 설정해 주세요.

보너스 실습

이미 선언된 sayHello() 함수 대신 Arrow Function 문법을 사용해서 똑같은 결과를 만들어 보세요.

실습 결과

시작
끝
Hello Codeit!

- 답 :

function sayHello(name) {
  console.log(`Hello ${name}!`);
}

console.log("시작");

setTimeout((name)=>{
	sayHello(name);
},2000,'Codeit!')

console.log("끝");