이전 포스팅 - 자바스크립트 콜백(Callback) 프로미스란 이번 시간에는 자바스크립트 프로미스에 대해서 알아보고자 한다. 이전 포스팅에서 자바스크립트가 비동기 처리를 하는 방법에 대해서 설명하면서 콜백을 소개했고, 콜백의 장단점을 설명하면서 콜백의 단점을 보완하기 위해 프로미스가 생겼다고 이야기 했었다. 조금 더 구체적으로 말하자면, 콜백으로 비동기성을 표현할 때 순차성(Sequentiality)과 믿음성(Trustability)이 결여되어 문제가 생긴다. 하나씩 살펴보자. 먼저 제어의 역전을 생각해 보자. 콜백 함수를 다른 곳으로 전달하게 되면 해당 프로그램의 진행은 그 곳에서 이루어지기 때문에 우리가 할 수 있는 일은 없고, 그저 무사히 잘 되기만을 바라는 방법밖에 없다. 이렇게 불안불안하게 코드..
중견기업 이상에서 많이 물어보는 CS 기본기 인터뷰 질문 중 첫 번째로 자료구조에 대해서 정리해 보려고 한다. 자료구조 Array와 LinkedList의 차이가 무엇인가요? (N사 전화면접) Array는 Random Access를 지원한다. 요소들을 인덱스를 통해 직접 접근할 수 있다. 따라서 특정 요소에 접근하는 시간복잡도는 O(1)이다. 반면 Linkedlist는 Sequential Access를 지원한다. 어떤 요소를 접근할 때 순차적으로 검색하며 찾아야 한다. 따라서 특정 요소에 접근할 때 시간복잡도는 O(N)이다. 저장방식도 배열에서 요소들은 인접한 메모리 위치에 연이어 저장된다. 반면 Linkedlist에서는 새로운 요소에 할당된 메모리 위치 주소가 linkedlist의 이전 요소에 저장된다...
이번에 살펴볼 문제는 프로그래머스의 문제이다. https://programmers.co.kr/learn/courses/30/lessons/62049 코딩테스트 연습 - 종이접기 직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽�� programmers.co.kr 종이를 계속 반으로 접어서 안으로 파인 부분(∨)은 0, 밖으로 볼록 튀어나온 부분(∧)은 1로 순서대로 출력하면 되는 문제이다. 이 문제는 규칙성을 찾고 적절한 자료구조를 찾아서 탐색하면 그렇게 어렵지 않게 풀 수 있는 문제이다. 다만, 개인적으로 처음에 생각하기가 조금 쉽지 않았던 것 같다. 한 번 ..
지난 포스팅 #1. 웹 브라우저 & HTML #2. CSS #3. JavaScript (Part1) 클로져(Closure)는 무엇이며, 어떻게/왜 사용하는지 설명해주세요. 클로저는 독립적인 변수를 가리키는 함수이다. 그리고 클로저 안에 정의된 함수는 만들어진 환경을 기억한다. 클로저를 통해 은닉화를 할 수 있으며, 콜백 함수 등을 사용할 때 발생할 수 있는 에러를 해결하는데도 유용하다. function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); //myFunc변수에 displayName을 리턴함 //유효범위의 어휘적 환경을 유지 m..
지난 포스팅 : JS #7. 비동기성: 지금과 나중 지난 포스팅에서 비동기가 무엇인지, 단일 스레드 방식의 이벤트 큐가 무엇인지, 동시성 패턴 등등에 대해서 알아 보았다. 함수 안의 문은 예측 가능한 순서대로 (컴파일러 상위 수준에서) 실행되지만 함수 단위의 실행순서는 이벤트(비동기 함수 호출)에 따라 달라질 수 있다. 어떤 함수든 콜백(Callback) 역할을 한다. 왜냐하면 큐에서 대기 중인 코드가 처리되자마자 본 프로그램으로 '되돌아올' 목적지이기 때문이다. 콜백은 자바스크립트에서 비동기성을 관리하는 가장 일반적인 기법이자, 자바스크립트의 가장 기본적인 비동기 패턴이다. 물론 콜백에도 단점이 있고 이 단점을 보완하기 위해 새로운 개념들이 나오게 되었으나, 그 이전에 콜백의 실체를 정확하게 아는 것은..
지난 포스팅에 이어서 Vue.js로 트렐로와 비슷한 앱을 만드는 작업을 블로그로 정리해 보려고 한다. 이번에 만들어볼 기능은 카드 이름을 실시간으로 수정하고 카드를 다른 리스트로 이동하는 기능이다. 1. 카드 이름 실시간으로 수정하기 예를 들어 첫번째 리스트인 A 리스트에서 첫번째 카드인 TaskA의 이름을 수정하고 싶을 때, 바로 이름을 수정하고 그 수정된 이름이 저장이 되게 하고 싶다. 이 때 사용하는 지시자는 v-model이다. v-model은 form의 input 요소와 컴포넌트의 output을 변화시키고 싶을 때 사용한다. 예를 들어 라고 하면 이 input에 입력하는 값이 컴포넌트의 message 데이터에 자동으로 저장되고 실시간으로 바뀔 때 마다 그 변화가 반영된다. 아래 소스코드 line ..
요즘 구직을 하는 중이다. 열심히 시험 보고 면접 보러 다니고 그러고 있다. 앞으로 언제가 될지 모르겠으나 회사를 가면 이만큼 운동 많이 하기 어려울 것 같다는 생각에, 운동은 거의 매일 꾸준하게 나가고 있는 중이다. 크로스핏 5개월차, 이제는 어떤 WOD가 나와도 당황하지 않고 할 수 있는 수준까지는 된 것 같다. 분발해야 할 기록 적당히 좋지도 나쁘지도 않은 기록 스스로 만족한 기록 5월 11일 월요일 WOD Every 5minutes 5rounds 10 strict pull ups 15 strict pushups 20 burpees 25 strict ab mat sit ups 내 기록 : 4Rounds, Rx'd 맨몸 운동 종합 세트 와드였다. 맨몸 운동을 절대로 만만하게 보면 안 될 것이다라는 큰..
이전 포스팅 Network #1. Intro 오늘은 IP 주소에 대해서 내용을 정리해보려고 한다. TCP/IP라는 프로토콜을 만들 때 이 프로토콜에서 사용하는 모든 장비들을 구분해 주기 위해서 만들어 낸 것이 IP 주소이다. 우리는 현재 IPv4라는 인터넷 프로토콜을 사용한다. 물론 오늘날에는 IPv6도 있지만, 아무래도 대중화된 프로토콜은 IPv4일 것이다. IPv4는 32 bit로 이루어진 숫자이며 총 네 구간으로 나누어져 있는데 각 구간은 8bit 이므로 0에서 255까지 숫자가 가능하다. 따라서 0.0.0.0 ~ 255.255.255.255까지 IP 주소로 사용할 수 있는 것이다. 산술적으로 보았을 때 2^32 = 약 40억 정도 되는데 실제로 전 세계에 존재하는 IP 주소는 그보다는 약간 적다...