목록전체 글 (62)
코린이 탈출기
이번에는 자바스크립트의 실행 컨텍스트에 대해서 정리해보려 합니다. 실행 컨텍스트를 간단히 설명해보자면, 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이라고 할 수 있습니다. 자바스크립트 엔진에서 코드를 실행하기 위해서는 실행에 필요한 정보들을 알고 있어야 하는데, 이 정보의 종류로는, - 변수: 전역 변수, 지역 변수, 매개 변수, 객체의 프로퍼티 - 함수선언 - 변수의 유효범위 - this 가 있습니다. 이와 같이, 실행에 필요한 정보를 형상화하고 구분하기 위해서 자바스크립트 엔진은 실행 컨텍스트를 물리적인 객체 형태로 관리합니다. 먼저 실행 컨텍스트의 종류에 대해서 알아봅시다! Global Context(전역 컨텍스트) 함수 안에서 실행되는 코드가 아니라면, 모든 스크립트는 전역 컨텍스트에서 ..
저번 시간에 자바스크립트의 비동기 흐름에 대해 알아보았습니다. 이번에는 자바스크립트에서 비동기 흐름을 제어할 수 있는 여러 방법에 대해 알아보도록 하겠습니다 ~ Callback 자바스크립트는 이벤트 중심의 언어입니다. 즉, 자바스크립트는 이벤트 값이 반환될 때까지 기다리지 않고 다음 이벤트를 계속 실행하게 되죠. function func1(){ console.log('first'); func2(); } function func2(){ setTimeout(function(){ console.log('second'); }, 0); func3(); } function func3(){ console.log('third'); } func1(); //출력값 // first -> third -> second 저번시간..
동기(Synchronous) 동기는 순차적, 직렬적으로 태스크를 수행하는 것을 의미합니다. 마치 큐(Queue)의 수행과정처럼, 선입선출의 코드 실행 처리 순서를 동기방식이라고 부릅니다. function func1(){ console.log('first'); func2(); } function func2(){ console.log('second'); func3(); } function func3(){ console.log('third'); } func1(); //출력값 // first -> second -> third 비동기(Asynchronous) 비동기 처리는 왜 필요한 것일까요? 대부분의 웹서비스는 사용자의 요청을 받아 DB에 접근하여 데이터를 가져와서 보여주는 형태를 가지는데, 이를 동기적으로 구..
Algorithm 순열, 시뮬레이션 Logic 주사위를 10번 던지는데, 각 주사위마다 어떤 말을 옮길지 결정해야하므로, 중복순열을 만들었다. -> 개수: (말 개수 = 4)^10개 diceMap: 각 노드에서 연결된 다음 노드번호를 저장하는 adj 리스트 diceScore: 각 노드에 해당하는 포인트를 저장하는 리스트 visited: 말들이 위치한 곳을 나타내는 리스트 makePermutation(now, goal, arr): 중복 순열을 만드는 함수 하나의 중복순열이 완성되면 getScore함수를 통해 그 경우에 얻는 score을 반환받는다. getScore(arr, diceInfo) arr: 각 주사위를 던질 때마다 옮길 말의 정보가 담긴 리스트 diceInfo: 현재 0~3번 말이 있는 위치를 저..
Algorithm 구현, 시뮬레이션 Logic 풀이 순서 상어가 처음 위치한 좌표로 sharkInfo와 sharkScent를 초기화한다. 시간을 늘려가면서 다음을 수행한다. sharkInfo에 들어있는 상어들을 하나씩 이동시킨다. 이동 rule 아무 냄새 없는 칸 찾기 -> 그런 칸이 여러개라면 우선순위를 따른다. 자신의 냄새가 있는 칸 찾기 -> 그런 칸이 여러개라면 우선순위를 따른다. 같은 위치에 여러 상어가 위치한다면, 가장 작은 번호의 상어를 제외하고 모두 없애준다. 현재 scentMap에 냄새가 남아있다면, 이 냄새가 남아있을 시간을 -1한다. (시간이 흐름을 의미) sharkInfo를 보면서 상어가 옮겨간 위치에 sharkScent를 업데이트한다. 시간이 1000초를 초과하면 -1을 출력한다...
Algorithm 시뮬레이션, 구현 Logic 접근법 -> green map을 blue map 처럼 만들어서 따로 구현하지 않고 한꺼번에 한다 ! 모노미노도미노 map은 이러한 모양을 가지는데, 이 때 우리가 필요한 정보는 초록색 map과 파란색 map이다. 빨간색 map은 y, x만 알면 되기 때문에 굳이 배열로 만들지 않아도 된다. 대부분의 풀이가 greenMap과 blueMap 각각을 따로 구현했던데, 나는 greenMap을 blueMap 모양으로 만들어서 함수 하나로 다 풀 수 있도록 했다. 이 때 주의할 점: redMap의 행 기준으로 blueMap 블럭을 민다 redMap의 열 기준으로 greenMap 블럭을 민다 기본적으로 새로운 블럭을 놓을 위치를 찾는 구현은 blueMap 기준으로 했고,..
Algorithm 시뮬레이션 Logic zoneInfo: 칸의 정보를 담음 -> Map의 크기를 (N+2) * (N+2) 로 늘려서 바깥 부분은 파란색 구역으로 만든다. chessMap: 체스 list를 원소로 갖는 2차원 Map (한 구역에 체스말이 여러개인 경우, 밑에 위치하는 체스 index가 더 작음- stack 구조) chessInfo: 체스말의 좌표를 저장하는 리스트 -> 이 리스트를 사용하면 2차원 순회할 필요가 없어진다 moveChess(): 체스 번호를 순회하면서 해당 번호의 체스를 움직이는 함수 체스 번호가 위치한 Map에서 그 번호를 만날 때까지 원소들 pop해서 newList의 앞부분에 insert한다. updateMap(now_y, now_x, False, newList, targ..
RxJava란? 자바로 리액티브 프로그래밍을 할 수 있는 라이브러리이며 비동기 프로그래밍과 함수형 프로그래밍 기법을 함께 활용한다. 리액티브 프로그래밍은 복잡한 비동기 프로그램을 쉽게 만들 수 있게 해준다. 또한 비동기에서 처리하기 힘든 에러 처리나 데이터 가공을 쉽게 할 수 있도록 돕는다. 이벤트를 콜백이 아니라 데이터의 모음으로 모델링하기 때문이다. 어떤 기능이 직접 실행되는 것이 아니라 시스템에 어떤 이벤트가 발생했을 때 처리한다. RxJava 변수 1. Observable observer 패턴을 구현. 옵서버 패턴은 객체의 상태 변화를 관찰하는 옵서버 목록을 객체에 등록. 직관적으로, 관찰자(Observer)가 관찰하는 대상 !! onNext: Observable이 데이터의 발행을 알린다. onC..