IT(44)
-
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 -
Leetcode 647. Palindromic Substrings - Python
Leetcode 647 문제 보기 문제 이해하기 영문 알파벳 소문자로 이루어진 문자열 s가 주어진다. 이때 s의 substring 중 팰린드롬인 경우가 얼마나 되는지 구하여라. 아이디어 구상 substring, 즉 부분문자열은 문자열내에서 일부 문자열을 그대로 떼어낸 형태를 말한다. 팰린드롬이란 앞뒤가 똑같은, 뒤집혀도 뒤집히기 전과 형태가 같은 것을 의미한다. 각각의 substring이 팰린드롬인지 확인하기 위해서는 어떤 한 character를 중심으로 양 옆으로 포인터가 퍼지며 두 포인터가 가리키는 character가 같은지 확인하면 된다. 그렇다면 for문을 통해 문자열 s의 첫번째 글자부터 반복을 돌리고, 각 글자에 대해 중심부터 투 포인터가 퍼지며 팰린드롬 여부를 판별하면 되겠다. 여기서 하나 ..
2022.07.21