분류 전체보기(218)
-
Javascript의 클로저란?
클로저(Closure)는 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 대표적인 특성 중 하나다. MDN에 의하면 클로저의 정의는 다음과 같다. A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment) 보통 어떤 개념의 정의는 개념에 대한 핵심을 압축해놓은 작은 책이다. 따라서 우리는 정의에 사용된 단어들을 일종의 목차내지 이정표 삼아서 탐색을 진행함으로써 그 책을 음미할 수 있다. 그러면 한 번 시작해보자. 1. Lexical environment 렉시컬 환경이란 코드를 실행하기 앞서 생성되는 특별..
2022.08.11 -
Javascript의 프로토타입이란?
자바스크립트는 함수형을 기반으로 하는 class-free 프로토타입 기반 객체지향 프로그래밍 언어다. ES6에서 class가 정식 문법이 되었지만 이 또한 결국 javascript 객체지향의 근간인 prototype 방식을 문법적으로 class처럼 보이게 만들어준 도구에 불과할 뿐이다. 그렇다면 프로토타입이란 무엇일까? 1. 자바스크립트의 탄생 Brendan Eich가 자바스크립트를 처음 설계할 당시, 웹브라우저에서 간단하게 돌아가는 작은 스크립트를 만들고자 했다. 때문에 복잡한 class 문법을 도입하지 않고 LISP 등의 함수형 언어에서 아이디어를 차용해 언어를 설계하고자 했다. 그러나 Netscape의 상사는 시대적으로 당시 인기가 많았던 Java와 유사한 언어를 만들길 원했고 결국 class 문법..
2022.08.08 -
자바스크립트의 this
자바스크립트에서 this의 쓰임새는 대표적인 객체지향 언어인 Java 등과 약간 다르다. 자바스크립트에서는 함수 호출 방식에 따라 this에 바인딩 되는 객체가 달라진다. 1. 자바스크립트 함수 호출 방식 자바스크립트에서 함수 호출 방식은 크게 다음 4가지가 있다. 일반적인 함수 호출 메소드 호출 생성자 함수 호출 (객체 생성 함수) apply/call/bind 호출 각각의 경우에 대한 this 바인딩을 알아보자. 이후 화살표 함수에서의 this 바인딩에 대해 알아보자. 2. 일반적인 함수 호출 this는 전역 객체를 가리킨다. const foo = function(){ console.log(this); } foo(); // window 3. 메소드 호출 this는 해당 메소드를 소유한 객체에 바인딩된다..
2022.08.04 -
var, let, const, 그리고 Hoisting
자바스크립트에서 변수 선언을 위한 키워드로 var, let, const가 있다. 이들의 특징을 살펴보고 이와 연관지어 호이스팅이라는 재미있는 개념 또한 알아보자. 1. var ES6 이전 자바스크립트에서 변수 선언 시, var를 앞에 붙였다. var 키워드를 사용하면, 변수를 재선언하거나 재할당하는 것이 가능하다. var는 또한 함수 레벨 스코프를 지녔다. 즉, 지역 스코프가 함수 내부에서만 만들어지기 때문에, for문, if문 등의 문 내부에서만 사용하고 싶은 값들이 의도치 않게 전역 변수를 바꿀 수도 있다. 모던 웹 개발 세계에서 var는 사용하지 않는다고 봐도 무방하다. 2. let과 const let과 const는 var와 다르게 블록 레벨 스코프다. 때문에 함수가 아닌 블록을 기준으로 지역 스코..
2022.08.01 -
웹의 역사, 그리고 프론트엔드
개념을 파악할 때 역사적 맥락에서 이해하면 핵심을 놓치지 않으며, 디테일을 가져갈 수 있고, 기억에 또한 오래 남는다. 그런 의미에서 웹과 프론트엔드의 역사를 살펴보고 이를 통해 미래를 더듬어 보자. 1. 초기의 웹, Web 1.0 1990년, 최초의 웹은 정보 제공이 목적이었다. 가상 공간에서 문서를 쉽게 제작하고, 하이퍼텍스트를 통해 문서와 문서를 연결하여 많은 사람들에게 문서가 공유될 수 있도록 하는 역할을 수행했다. 이후 1990년대 중반, CGI(Common Gate Interface) 통신이 가능해졌다. 유저들은 정보를 서버로 보내고 서버에서는 동적으로 페이지를 생성할 수 있게 되었다. PHP를 비롯해 여러 서버 스크립트 언어들이 탄생했다. 이 무렵, 서버와 통신하기 위한 간단한 조작이 클라이..
2022.07.28 -
Leetcode 33. Search in Rotated Sorted Array - Python
Leetcode 33 문제 보기 문제 이해하기 오름차순으로 정렬된 어떤 정수의 리스트 nums가 특정 값을 기준으로 회전되었다. 예를 들어 [1,2,3,4]가 3을 기준으로 회전되면 [3,4,1,2]가 된다. 어떤 정수 target이 주어질 때, 해당 target이 nums안에 존재하는지 판단하고 만약 존재한다면 그 숫자의 nums내 index값을 반환하고, 존재하지 않는다면 -1을 반환하라. 단, 알고리즘은 O(logn)의 시간복잡도를 가져야 한다. 아이디어 구상 단순히 target이 nums에 있는지 알기위해서는 리스트를 순차적으로 탐색하면서 있는지 없는지 판단하면 될 것이다. 그러나 이는 O(n)의 시간복잡도를 가진다. 때문에 O(logn)의 시간복잡도를 가지기 위해서는 결국 Binary Searc..
2022.07.25