목록2022/08 (12)
치춘짱베리굿나이스

콜 스택 (호출 스택) 개념 프로그램이 함수 호출을 추적할 때 사용한다 현재 어떤 함수가 동작하고 있는지, 그 함수 내에서 어떤 함수가 동작하는지, 다음에는 어떤 함수를 동작하여야 하는지 등을 제어한다 스택의 LIFO (후입선출) 특성을 생각하면 호출 스택도 비슷한 원리로 동작함을 알 수 있다 메모리 구조에서 스택이 의미하는 것이 바로 이 콜 스택이다 힙이랑 다른 점 스택은 액세스가 빠르고, 힙은 상대적으로 느리다 힙은 사용자가 직접 변수 할당 및 해제를 관리해줘야 하지만, 스택은 관리할 필요가 없다 (CPU가 알아서 관리해줌) 힙은 메모리 단편화가 일어날 수 있지만, 스택은 그렇지 않다 스택 내의 변수는 해당 스코프 내에서만 접근할 수 있지만, 힙 내의 변수는 (주소값만 알고 있다면) 전역적으로 접근 ..

일반 함수 vs 화살표 함수 (람다식) 참고로 필자는 자바스크립트 입문을 let, const, 화살표함수로 했기에 그것만 주구장창 썼는데 이걸 왜 쓰는지는 명확히 이해하지 못했다 (그냥 일반함수랑 똑같이 작동한다고 생각했음) 언젠가 두 개의 차이를 정리해봐야겠다 막연한 생각은 했었는데 그게 지금이 될 줄은 일반 함수 function foo() { console.log("foo"); } 평범하게 작성한 함수이다 const bar = function foo() { console.log("foo"); } 변수에 할당하고 싶다면 이렇게 작성한다 화살표 함수 const foo = () => { console.log("foo"); } 화살표를 이용해서 조금 더 간결하게 작성되는 함수이다 ES6에서 추가되었으며, 람..

Symbol 뭐 하는 녀석인지? 태초에 자바스크립트는 원시 자료형 5개와 객체 자료형 1개 총 6개의 자료형으로 이루어져 있었다 Number, String, Boolean, null, undefined 그리고 객체 Object가 그것이었는데, ES6 (2015년) 에 원시자료형팀 환상의 식스맨으로 Symbol이 합류했다 심볼은 객체의 고유 식별자로 활용할 수 있는 원시자료형으로, 쉽게 말해 객체 내부 프로퍼티의 키를 설정할 때 사용할 수 있다 심볼을 사용하면 프로퍼티 키가 겹치지 않고 고유한 값으로 설정되므로, 키가 중복으로 설정됨으로써 발생하는 충돌을 막을 수 있다 프론트엔드에서 클래스명을 겹치지 않게 설정하기 위해 CSS module을 사용하거나, CSS-in-JS 라이브러리들 (Styled Comp..

자바스크립트에서의 싱글톤 패턴과 static 싱글톤의 의미 Singleton 이름의 ‘Single’ 에서 뭔가 한 개..? 하나의…? 라는 뜻이 연상된다 싱글톤은 특정 클래스에 인스턴스를 단 하나만 생성 (메모리를 단 한 번만 할당) 하여 사용하는 패턴을 의미한다 (= 메모리를 단 한 번만 할당한다) 특징 인스턴스가 딱 하나만 생성된다 (대개 private, static 등의 키워드를 이용하여 구현한다) ‘단 한 개’ 만 생성되는 인스턴스는 전역으로 참조될 수 있으며, 다른 객체들이 이 공유된 인스턴스에 접근할 수 있어 데이터 공유가 편리하다 메모리를 한 번만 할당하면 되기 때문에 효율이 좋다 인스턴스가 ‘단 하나' 임을 보장하고 싶을 때 주로 사용한다 단점 일반 클래스보다 더 복잡하며, 비동기적인 상황..

HTTP 기본 HTTP 소개 Hypertext Transfer Protocol 응용 계층 (Application Layer) 에서 사용되는 프로토콜로, 1989년에 팀 버너스 리에 의해 고안되었다 참고로 www랑 URL 개념도 이분이 고안하셨다 역시 CERN인가? 대박천재시다 처음에는 웹 브라우저 - 웹 서버 간 하이퍼미디어 문서 (이름에도 나와있듯, 말그대로 Hypertext 문서) 를 주고받기 위해 만들어진 프로토콜이지만, 지금은 일반 텍스트나 JSON 객체, 이미지 등 미디어 파일들도 주고받을 수 있게 확장되었으며, 어플리케이션이나 IoT 등 웹과 관계없는 분야에서도 이 프로토콜을 이용하여 데이터를 주고받는다 HTTP는 www (월드 와이드 웹) 에 내재되어 있으며, 일반적인 웹 브라우저에는 htt..
HTTP 응답 코드 약간 치트시트 느낌으로 만들어보는 응답 코드 포스팅이다 1XX 요청을 잘 받았고, 요청에 따른 처리를 진행중이라는 의미이다 사용 빈도는 드물지만 가끔 웹소켓 등에서 사용한다 100 Continue 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 의미이다 클라이언트에서 더이상 작업할 게 없는 경우, 보통 이 응답은 무시한다 101 Switching Protocols 클라이언트가 요청한 대로 프로토콜을 바꿀 것이라는 의미이다 웹소켓에서 많이 사용한다고 한다 103 Early Hints 서버가 아직 처리를 진행중이긴 하지만, 클라이언트가 미리 자원을 읽을 수 있도록 맛보기를 제공한다 2XX 성공! 요청이 잘 들어왔고, 서버에서 이 요청을 이해했으며 제한 없이 수용될 수 있음을 의미한..
!밀비 급일 문제 당신은 길을 가다가 이상한 쪽지를 발견했다. 그 쪽지에는 암호가 적혀 있었는데, 똑똑한 당신은 암호가 뒤집으면 해독된다는 것을 발견했다. 이 암호를 해독하는 프로그램을 작성하시오. 입력 한 줄에 하나의 암호가 주어진다. 암호의 길이는 500을 넘지 않는다. 마지막 줄에는 "END"가 주어진다. (END는 해독하지 않는다.) 출력 각 암호가 해독된 것을 한 줄에 하나씩 출력한다. 풀이 const terces = () => { let arr = require("fs") .readFileSync("/dev/stdin") .toString() .trim() .split("\n"); const ans = []; for (let str of arr) { if (str === "END") break..

OSI 7계층 프로토콜? 단어 뜻이 규약, 협약으로, 비단 네트워크 뿐만 아니라 여러 분야에서 상호간의 소통 및 교류를 위한 사회적 약속 및 규칙을 의미한다 예를 들어 편지를 부치기 위해 우체국에 가야하는 것도 일종의 프로토콜이라 할 수 있겠다 마찬가지로 네트워크에서의 프로토콜은, 네트워크 환경 내의 모든 기기가 통신하며 데이터를 주고 받기 위한 규약이라고 할 수 있다 네트워크 프로토콜이 정해지지 않을 경우, 각 기기들은 독자적인 방식으로 통신을 시도할 것이고, 그러다 보면 우연하게 보내고자 했던 요청이 잘 도착할 수도 있지만 대부분의 경우 실패할 것이다 따라서 프로토콜을 사전에 정의하여 요청 및 응답의 포맷, 각 이벤트별 행동 등을 사전에 전역으로 정의하여 모든 기기가 해당 규약을 따라 원활히 통신하도..