티스토리 뷰
안녕하세요 :)
이번포스팅에서 다루어볼 내용은 배열과 콜백함수 입니다.
여러 프로그램언어를 다루며 배열은 많이 다루어 보았지만 자바스크림트에서의 배열은 조금 다른 부분이 있습니다. 배열과 스택의 원리를 섞어서 사용도 가능하며 함수 객체를 배열로 묶어줄수도 있기 때문입니다.
콜백함수는 비동기식 프로그래밍을 이룩하는 방법중하나입니다. 자바스크림트의 경우 여러 이벤트와 이벤트에 따른 처리함수의 수행시간이 각각 다르기 때문에 동기식 처리로는 원활한 수행에 무리가 있습니다. 이번 포스팅에서는 동기식 처리의 단점과 이를 극복하는 비동기식 처리를 살펴보겠습니다.
배열)
배열의 사용은 다음과 같습니다.
선언은 위와 같이 var변수를 선언하여 []로 묶어진 배열을 초기화하는 방법을 많이 이용합니다. 30번 라인의 .slice의 경우 두개의 인자(시작인덱스,배열 사이즈)를 받아들여 새로운 배열을 생성해주는 함수 입니다. 이경우엔 첫인덱스부터 배열의 길이만큼을 새로만들었으니 원래의 배열과 동일합니다.
자바스크립트의 배열은 pop과 push를 사용한 스택동작이 가능하고 shift와 unshift를 이용한 큐의 동작도 가능합니다.
이를 이용해 초기화되지 않은 함수베열 calcArr를 선언하고 이전포스팅에서 만들어본 모듈의 함수들로 배열을 초기화한다면 다음과 같습니다.
그렇다면 각각의 배열의 원소에 해당하는 함수들을 for문을 이용하여 하나씩 사용해보겠습니다.
함수의 인자값으론 숫자배열의 0번과1번 인덱스의 값을 사용하였고 그 결과 첫라인은 add가 두번째라인은 sub가 세번쨰라인은 mul의 함수 리턴값이 출력된것을 확인할수 있습니다.
이제 스택과 큐의 동작들을 이용하여 첫번째 인덱스값을 shift했다가 20이라는 값을 unshift하고 마지막인덱스값을 pop해보겠습니다.
콜백함수)
콜백함수를 이야기 하기전에 동기식 프로그래밍과 비동기식 프로그래밍에 대하여 이야기할 필요가 있습니다.
동기식프로그래밍이란 코드의 최상단부터 최하단까지 순차적으로 실행되는 프로그램을 말합니다. 예를들어 아래의 함수 호출과정을 살펴보겠습니다.
선언된 함수에 인자를 대입하고 콘솔에 결과를 출력해주는 간단한 동기식프로그램이 오류없이 동작을 잘하고 있습니다.
그런데 만약 함수의 실행과정이 복잡해서 아직 리턴값을 보내지 못했는데 결과를 출력하게되면 어떻게 될까요?
아마 초기화되지 않은값을 출력하게 될테니 원하는 결과를 얻어낼수 없을것입니다. 아래의 예는 setTimeout이란 함수를 사용하여 일부로 딜레이를 만들어준 코드입니다. 결과는 아래와 같습니다.
이문제를 해결해주기 위해서는 딜레이시간을 기다리고, 결과 값이 만들어졌을때 이를 callback받아 호출하는 비동기식 프로그래밍을 사용해야 합니다. 자바 스크립트에서는 이벤트를 발생할때 그에 알맞은 함수가 호출되어 실행되고 결과가 나온다면 보여지는 이러한 비동기식 프로그래밍을 다분하게 사용하게 됩니다.
어쨋든 위의 문제를 해결하기 위해 call back함수를 사용한 비동기식 프로그래밍을 수행한다면 아래와 같습니다.
물론 딜레이를 기다리는 동안 약간의 기다림은 있지만, 동기식으로 했을때에 비해 원하는 함수값을 얻어낼수 있었습니다.
생성자 사용예)
생성자는 자바스크립트에서 아래와 같이 사용됩니다. 자세한 내용은 java 카테고리에서 심도있게 다룬 경험이 있기 때문에 언어가 자바스크립트일땐 아래와 같이 사용된다는 것만 참고하세요!
java 생성자 사용예 - https://wise-computing-life.tistory.com/20?category=911735
Java - Class & 생성자
안녕하세요 Shiny Ocean입니다. 자바를 주제로한 두번째 포스팅은 Class와 생성자에 대하여 다루어 보겠습니다. 클래스와 생성자는 자바 코딩에서 가장 기본적인 부분이며 중요한 부분입니다. 클래
wise-computing-life.tistory.com
'Development > Node.js' 카테고리의 다른 글
Node.js - event (0) | 2021.06.30 |
---|---|
Node.js - url (1) | 2021.06.29 |
Node.js - 외장모듈, 내장모듈 (0) | 2021.06.25 |
Node.js - json, 모듈 분기 (1) | 2021.06.25 |
Node.js - intro (0) | 2021.06.24 |