Skip to main content

[Javascript] 제너레이터 알아보기 (w. Iterator, 배열)

서론 CS 스터디에서 8월 21일 발표한 Generator에 대해 정리한 문서를 블로그에 공유하고자 한다. 이번 글에서는 크게 다음과 같은 주제를 다룬다. 제너레이터가 무엇인지 자바스크립트에서 제너레이터는 어떻게 구현되어 있는지 제너레이터와 이를 생성하는 제너레이터 함수들의 prototype은 어떠한지 자바스크립트의 제너레이터는 어떤 특징이 있고, 이를 어떤 케이스에 응용할 수 있을지 제너레이터란? 제너레이터란, 반복 루프의 동작을 제어 하는데 사용 가능한 루틴 을 말합니다. 루틴: 프로그램 실행 동안 반복적으로 호출 및 사용하도록 의도된 코드 시퀀스입니다. # 모든 제너레이터는 반복자(Iterator)이며, 값의 시퀀스를 생성한다는 점에서 배열을 반환하는 함수와 유사하지만 한 번에 값을 모두 반환하지 않고 한 번에 하나의 값을 생성한다는 점이 다릅니다.

[CS] 가상화 알아보기 (w. Hypervisor, Docker)

서론 CS 스터디에서 8월 13일 발표한 가상화에 대해 정리한 문서를 블로그에 공유하고자 한다. 가상화에 대하여 가상화란? 가상화(Virtualization)란 하나의 물리적인 하드웨어 시스템(컴퓨터) 위에 추상화 계층을 생성해, 여러 개의 시뮬레이션 환경 또는 전용 리소스로 분할할 수 있게 해주는 기술을 말합니다. 즉, 하드웨어에 묶여있던 자원들을 추상화를 통해 분산하여 사용할 수 있게 해주는 기술인 것입니다. 이러한 분리는 하이퍼바이저(Hypervisor)라고 부르는 소프트웨어를 통해 이뤄지며, 가상화를 통해 생성된 가상 표현을 VM(Virtual Machine, 가상 머신)이라고 합니다. 가상화의 역사 가상화는 1960년대 대형 메인프레임 컴퓨터를 사용하던 시절, 각 메인프레임들이 한 번에 한 프로세스만 수행하던 것을 개선하고자 등장하게 되었습니다.

[Javascript] 추상 구문 트리(AST) 알아보기(w. 파스 트리, CFG, BNF)

서론 CS 스터디에서 7월 30일 발표한 추상 구문 트리에 대해 정리한 문서를 블로그에 공유하고자 한다. AST? 추상 구문 트리(Abstract Syntax Tree, AST)란, 프로그램 또는 코드 조각의 구조를 표현하기 위해 사용되는 자료구조를 말합니다. 이때 트리를 이루는 각 노드들은 코드에서 발생되는 구문을 나타냅니다. 구문이 추상적이다(Abstract) 라는 말의 뜻은, 이 트리가 실제 구문의 모든 세부 사항들을 나타내지는 않고 구조나 내용과 관련된 세부 사항들만 나타낸다는 뜻입니다. 이러한 특징은 구문 트리(또는 파스 트리)라고 불리는 개념과 추상 구문 트리를 구분되게 합니다.

[Javascript] Scope 알아보기 (w. 일반 프로그래밍에서의 Scope)

서론 CS 스터디에서 7월 16일 발표한 자바스크립트의 Scope에 대해 정리한 문서를 블로그에 공유하고자 한다. 스코프? 프로그래밍에서 스코프란, 프로그램의 요소들(변수 및 상수, 함수 등)이 유효한 영역을 말합니다. 또한, 스코프는 프로그램의 부분 또는 특정 지점에서 유효한 모든 이름 바인딩 집합을 가리키는 데에도 사용되며, 이때 컨텍스트 또는 환경(Environment) 라고도 일컬어집니다. 스코프 개념에 따라 프로그램에서 영역을 벗어난 변수는 가리킬 수 없고, 영역 내부의 요소들은 바인딩 된 이름(identifier)을 통해 가리킬 수 있게 됩니다. 이는 스코프가 프로그램의 다른 부분에 존재하는 변수를 서로 구분하기 위해 등장했기 때문입니다.

[Javascript] Prototype 알아보기 (w. 왜 JS는 Prototype을 채택했나?)

서론 CS 스터디에서 7월 9일 발표한 Prototype에 대해 정리한 문서를 블로그에 공유하고자 한다. prototype in Javascript 객체지향 프로그래밍 언어들에서 기존 코드를 확장하는 방식 중 대표적인 방식으로 상속(Inheritance)이 있습니다. 자바스크립트에서는 이러한 상속을 객체를 사용해 구현합니다. 프로토타입 체인 각 객체들은 프로토타입(prototype) 이라는 다른 객체에 대한 내부적인 링크를 갖고 있습니다. 그리고 그 프로토타입 객체는 또 다른 자체 프로토타입을 가지며, 프로토타입 체인이라 부르는 이러한 연결은 null을 프로토타입으로 가지는 객체에 도달할 때 까지 계속됩니다. 이 null은 프로토타입 체인의 최종 링크 역할을 합니다.

[Javascript] 모듈 시스템들 알아보기

서론 CS 스터디에서 7월 2일 발표한 모듈 시스템에 대해 정리한 문서를 블로그에 공유하고자 한다. Module in Javascript Javascript에서 모듈이란, 다른 프로그래밍 언어의 모듈처럼, 커진 자바스크립트 코드들을 여러 파일로 분리하는 것을 말합니다. 초기에는 자바스크립트 코드들이 크기도 작고 단순한 작업을 수행했기 때문에 코드의 분리를 필요로 하지 않았지만, 자바스크립트가 완전한 애플리케이션을 실행할 수 있게 되고, 이에 따라 코드의 크기도 커지고 복잡해졌습니다. 특히 기존의 경우, <script> 태그를 통해 여러 자바스크립트 파일을 불러올 수 밖에 없었는데, 이들은 전역 네임스페이스를 공유하기 때문에 이전 스크립트의 변수를 뒤집어쓰는 등 혼동을 초래하기 쉬웠습니다.

[Javascript] 이벤트 전파 단계(버블링과 캡처링) 알아보기

서론 CS 스터디에서 6월 25일 발표한 이벤트 캡처링과 버블링에 대해 정리한 문서를 블로그에 공유하고자 한다. 이벤트 버블링과 캡처링 HTML 태그에서 발생할 수 있는 이벤트는 표준에 따르면 다음과 같은 순서로 전파됩니다. 캡처링 단계(CAPTURING_PHASE) : 이벤트가 DOM 트리 상의 하위 요소로 전파되는 단계 타깃 단계(AT_TARGET) : 이벤트가 실제 대상 요소에 전달되는 단계 버블링 단계(BUBBLING_PHASE) : 이벤트가 DOM 트리 상의 상위 요소로 전파되는 단계 즉, 위와 같은 형태로 DOM 트리가 구성되어 있다면, <span>을 클릭하면 이벤트가 최상위 조상부터 시작해 아래로 전파되고, 타겟 요소에 도착해 이벤트가 실행된 후, 다시 위로 전파됩니다.

[Java] Exception 알아보기

서론 CS 스터디에서 6월 19일 발표한 Exception에 대해 정리한 문서를 블로그에 공유하고자 한다. Java에서, Exception이란? Exception 이란, Java 프로그램 실행 도중 발생하는 이벤트 로, 정상적인 명령 흐름을 방해합니다. 예외 처리 흐름 어떠한 메서드 내에서 오류가 발생하면, 메서드는 예외 객체(Exception Object)를 생성해 런타임 시스템에게 넘깁니다. 이때, 이처럼 예외 객체를 생성해 런타임 시스템에 전달하는 것을 예외를 던진다(Throwing an Exception)라고 합니다. 예외 객체(Exception Object) : 발생한 오류의 유형, 발생 당시 프로그램의 상태와 같은 오류에 대한 정보를 포함하는 객체입니다.

[OS] IPC 알아보기

서론 CS 스터디에서 6월 4일 발표한 IPC에 대해 정리한 문서를 블로그에 공유하고자 한다. IPC란? 프로세스 간 통신(IPC, Inter-Process Communication)이란, OS상에서 프로세스간에 정보 공유, 모듈화 등을 이유로 데이터와 정보를 공유하는 행위 또는 방법을 의미합니다. 기본적으로 프로세스들은 서로 독립적이기 때문에 영향을 주지도, 받지도 않습니다. 하지만 정보 공유, 성능 제고, 모듈화 등의 이유로 프로세스간 협력이 필요한 경우, 그들간의 정보 공유를 위한 IPC 메커니즘이 필요하게 됩니다. IPC는 공유 메모리 모델, 메시지 전송 모델 두 가지의 근본적인 모델과, Client-Server 시스템에서 주로 사용되는 socket, RPC(Remote Procedure Call), pipe 등의 모델이 있습니다.

[Javascript] Map과 Object, 뭘 써야 할까?

서론 최근 한 기업의 코딩 테스트를 푸는데, 중첩된 구조의 객체를 필요로 하는 문제를 맞닥들이게 되었다. 나는 ‘Object가 Map보다 있는 기능이 별로 없으니까, 혹시 몰라서 메모리 터질 수 있는 Map 보단 Object가 낫지 않을까?’ 라는 생각으로 Object를 활용해 해당 문제를 풀었다. 그리고 그 이후 내 생각이 맞을까? 라는 생각을 갖게 되었고 이를 직접 테스트 한 뒤 내용을 정리해보고 싶어졌다. 따라서 여러 글을 찾아 보았고, 직접 문제와 유사한 상황을 가정하고 코드를 작성해 시간과 메모리 사용량을 측정해보았다.