본문 바로가기
반응형

분류 전체보기27

(js)Promise만들기(5) - then, catch (완) ←(js)Promise만들기(4) - constructor, resolve, reject CustomPromise - then then는 다음 프로미스를 생성해서 현재 프로미스와 연결한 다음 반환하는 메소드입니다. 프로미스에 빈 executor를 넣어서 nextPromise를 생성합니다. 그 후 eventTarget에 fulfilled와 rejected의 이름으로 이벤트리스너를 저장합니다. 각 이벤트 리스너에는 스위치를 nextPromise와 묶어서 호출하게 합니다. 그리고 만약 현재 프로미스가 이미 확정된 상태라면 바로 이벤트를 보내 스위치를 누릅니다. 마지막으로 nextPromise를 반환합니다. 스위치 runOnSettled는 다음 프로미스의 이행함수와 연결된 스위치입니다. 이전 프로미스의 상태와 .. 2024. 1. 28.
(js)Promise만들기(4) - constructor, resolve, reject ←(js)Promise만들기(3) - CustomEvent, EventTarget PromiseStateEvent PromiseState에 프로미스 상태를 표현하는 문자를 저장해 사용했습니다. PromiseStateEvent는 CustomPromise에 상속할 객체로 프로미스 상태와 EventTarget을 관리하는 역할을 합니다. PromiseStateEvent 생성자가 호출되면 상태는 pending, eventTarget은 undefined로 초기화합니다. this.eventTarget = undefined로 초기화하면되는데 굳이 이런 방식을 택한것은 실제 콘솔에 Promise 인스턴스를 생성하면 [[PromiseState]], [[PromiseResult]], [[Prototype]] 만 표시되기 때.. 2024. 1. 28.
(js)Promise만들기(3) - CustomEvent, EventTarget ←(js)Promise만들기(2) - 구상 이벤트 기반으로 프로미스를 만드려고 했는데, IE에 CustomEvent와 EventTarget이 없어서 직접 만들어야 했습니다. 다행히도 둘 다 MDN에 polyfill이 있었습니다. (그런데 지금은 없어요.) CustomEvent // myCustomEvent.js /** * 커스텀 이벤트 생성자 * @param {string} event * @param {object} params * @returns {object} customEvent */ var MyCustomEvent = (function setCustomEventConstructor() { /** * window.CustomEvent의 constructor를 지원하지 않을 때(IE) CustomEv.. 2024. 1. 28.
(js)Promise만들기(2) - 구상 ←(js)Promise만들기(1) - 전체코드 TMI 더보기 저는 Promise를 이벤트 기반으로 설계했습니다. 프로미스의 핵심은 언제 끝날지 알 수 없는 비동기 처리를 순서대로 연결하는 것인데, 그럼 비동기 처리가 완료됐다는 것을 어떻게 알리지? ==> 아! 이벤트를 발생시키자! 라는 생각으로 이어졌던 것입니다. 다 만들고 나서야 이벤트가 아니어도 충분히 만들 수 있다는 것을 알았지만, 이벤트도 나름의 장점을 가지고 있습니다. 비동기 처리가 완료됐을 때 실행해야할 로직를 이행(resolve)과 거부(reject)로 구분해 저장해야하는데, 이벤트는 fulfill과 reject 이름으로 리스너에 저장하면 알아서 처리해줘서 그 부분에 신경을 덜 쓸 수 있기 때문입니다. (실제로는 IE에 CustomEvent.. 2024. 1. 27.
(js)Promise만들기(1) - 전체코드 // customPromise.js var CustomPromise = (function getCustomPromise() { /** 프로미스 상태 */ var PromiseState = { pending: 'pending', fulfilled: 'fulfilled', rejected: 'rejected', } /** * 프로미스 상태 이벤트 핸들러 생성자 * 프로미스의 상태를 관리하고, 상태관련 eventListener 생성과 dispatchEvent를 담당 */ function PromiseStateEvent() { this.state = PromiseState.pending Object.defineProperty(this, 'eventTarget', { value: undefined, writabl.. 2024. 1. 27.
[백준] 1로 만들기 1463번 - java import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); minCount = new int[n+1]; System.out.println(makeOne(n)); } private static int[] minCount; private static int makeOne(int n) { if(n 2021. 11. 18.
반응형