Language & Runtime

    [Java] Stream API

    Java 8에서 큰 변경점 중 하나인 Stream API를 공부해 보자. (스크립트 언어를 주로 쓰다 Java로 넘어오니 답답한 부분들이 많았는데 조금이나마 해소되었다 :D) # Stream 이란? Java에서는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용한다. 하지만, 이렇게 저장된 데이터에 접근하려면 반복문(for, while)이나 반복자(iterator)를 사용해야만 했는데, 이는 너무 장황할뿐더러 재사용이 거의 불가능하다. 또한, 내가 Java를 처음 공부하며 킹 받았던 부분인데, 각 컬렉션 클래스마다 같은 기능의 메서드가 중복 정의 되어있다. List를 정렬할 때는 Collections.sort()를 쓰고, 배열을 정렬할 때는 Arrays.sort() 쓰고?! 이러한 문제점들을 해결..

    [Java] BufferedReader와 BufferedWriter

    백준과 같이 input 값을 직접 받아야 하는 알고리즘 문제를 자바로 풀다 보면 Scanner 사용 시 시간 초과가 발생하는 문제가 있다. 이를 BufferedReader와 BufferedWriter를 사용해 해결한다. #BufferedReader 문자열을 입력받는 Scanner에 대응되는 클래스이다. 다만, 잘 알고쓰자. 먼저 Oracle 공식 문서를 보면, Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. 요약하면 BufferedReader는 문자를 버퍼링 하는 클래스이다. 원래 InputStreamRe..

    [Node.js] 나의 첫 오픈소스 angxios 개발기

    드디어(?) npm에 첫 오픈소스를 배포한 기념으로 글을 작성한다. # 개발 이유 회사에서 맡고 있는 프로젝트 중 하나인 예약서버를 리팩토링하던 중, 메인으로 쓰고있는 API Request 라이브러리인 axios를 내 방식대로 업그레이드 하고 싶은 욕구가 샘솟았다. 그 이유는 바로 Retry 처리 때문인데, 그때 당시의 나는 요청에서 에러가 날 경우 귀찮음과 일단 빨리 개발하자는 마인드를 핑계삼아 try catch로 Retry 처리를 했다. const callAPI = async () => { try { // 첫 번째 api 요청! const firstTry = await axios.get("API URL"); // 성공하면 이것저것 해야지... doSomething(firstTry); } catch (..

    [Node.js] Event Loop를 파헤쳐 보자

    Node.js로 서버를 굴리고 있는 나지만, 정작 내가 Node.js를 이해하고 사용하는지는 항상 의문이었다. 그에 따라 Node.js의 핵심 요소 중 하나인 Event Loop를 공부해 본다. # Event Loop란? 참조 : Node.js 공식문서 The Node.js Event Loop, Timers, and process.nextTick() | Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org 위 다이어 그램의 각 박스는 특정 작업을 수행하기 위한 이벤트 루프의 페이즈를 의미한다. 긱 페이즈 마다 콜백을 실행할 FIFO 큐를 가지며, 각 단계에서 정해진 역할만 수행 후 다음 페이즈로..