본문 바로가기

Study

(10)
클래스와 프로토타입 JavaScript는 프로토타입(prototype) 기반의 언어라고 한다. 그래서 프로토타입이 뭘까? 프로토타입 체인은 뭘까? 내 얕은 지식을 바탕으로 정리하자면, 클래스와 프로토타입은 둘 다 객체 지향이라는 개념을 구현하기 위한 방법(론)이고, 둘의 가장 커다란 차이는 프로토타입의 인스턴스 자체가 상속과 다형성을 지원하느냐 아니냐인 것 같다. 클래스는 클래스와 인스턴스 사이의 차이가 명백하다. 클래스는 일종의 틀이고, 인스턴스는 그 틀의 조건을 만족하는 실물이다. 이러한 클래스 기반 언어와 다르게, 프로토타입 기반 언어의 객체는 그러한 구분이 적다. 객체 자체가 또 하나의 프로토타입으로 기능할 수 있는 것이다. JavaScript에서 모든 객체는 자신의 프로토타입 객체를 참조하는 숨겨진 속성 'prot..
[Vue.js] props props는 properties의 준말으로, Vue에서 부모 컴포넌트가 가지고 있는 변수를 자식 컴포넌트에게 "상속"(물론 OOP에서의 상속과는 결이 다르다)해주기 위해 사용되는 기능이다. 다음과 같은 부모-자식 컴포넌트를 생각해보자.  PARENT {{ name }} {{ age }} child {{ nameProp }} {{ ageProp }} 개명 request take 떡국  Vue.js에서는 props라는 기능을 통해 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달한다. props의 개략적인 흐름은 다음과 같다. 1) 전달될 데이터인 name과 age는 ref()를 통해 반응형 변수로 설계2) 자식 컴포넌트를 HTML 내에서 호출할 때 어떤 데이터를 props로 전달해줄지 명시..
[HTTP] Stateless 상태(state)란 특정 상황에서 어떠한 대상의 정보를 가리키는 단어다. 따라서 상태란 대상에 종속적이다. 뒤집어서 stateless라고 함은 달리 의존하는 대상이 없고 독립적으로 기능한다는 뜻이라고 할 수 있겠다. HTTP(Hypertext Transfer Protocol)의 특징 중 하나는 stateless다. 각각의 요청과 응답은 독립적이며, 이전의 요청이나 응답에 명시적으로 의존하지 않는다. 이는 HTTP 위에서 웹 서버와 클라이언트 간의 통신이 요청-응답의 단위로 이루어지고, 각 요청은 별도의 작업으로 처리된다는 것을 의미한다. 따라서 각 요청마다 필요한 정보는 함께 전달되거나 다른 방법을 통해 관리되어야 한다. 예를 들어 HTTP에서는 사용자의 인증(authentication)을 어떻게 처리할..
인터페이스 인터페이스(interface)란 상호작용의 규정이다. 상호작용에는 3가지가 필요하다. 액션을 취하는 쪽, 액션에 응답하는 쪽, 그리고 액션의 방식. 중요한 것은 액션의 방식이다. CLI(command-line interface)에 대해 생각해보자. 사용자는 컴퓨터에게 요청하고, 그 요청에 대해 컴퓨터는 사용자에게 응답한다. CLI는 이러한 요청과 응답의 구성 방식이 커맨드 라인이라고 하는 텍스트로 이루어진다. GUI(graphical user interface)는 액션의 구성 방식이 시각적인 대상에 대한 클릭/드래그 등으로 바뀐 것이다. 상호작용을 하는 측은 그 규정의 디테일에 대해 알아야만 한다. 예컨대 API(application programming interface)가 그렇다. 정해진 방식을 따라..
this JavaScript에는 화살표 함수 표현식(arrow function expression)이라는 게 있다. 보통 화살표 함수라고 줄여 부르는데, 2015년에 발행된 ES6부터 도입된 기능이라고 한다. 화살표 함수를 단순히 익명 함수(anonymous function)라고 부르기는 어렵다. 화살표 함수에 이름이 없긴 하지만, JavaScript에는 전통적인(traditional) 익명 함수가 존재하기 때문이다. 바로 흔히 말하는 함수 표현식이다. fucntion 키워드로 시작하여 함수를 정의하는 게 아니라, 변수에 함수를 할당하는 방식으로 이루어지는 함수 정의 방식. 그러한 전통적인 익명 함수와 화살표 함수 사이의 가장 큰 차이라고 한다면 역시 this 키워드일 것이다. this 키워드는 누더기 같은 존재..
프로그래밍 패러다임 프로그래밍 패러다임이란 프로그램을 구성하는 코드 작성, 즉 구현에 있어서의 추상적 체계를 말한다.비구조적 프로그래밍(unstructured programming)이란 프로그램의 실행 순서가 전부이던 시기의 프로그램 작성 패러다임이다. 'A가 끝났으니 B로 가시오.' 비구조적 프로그래밍에서 규칙은 단 하나다. 올바른 순서에 따라 올바른 출력을 뽑아내는 것. 코드의 작성은 '틀리지 않게' 이루어졌고, 코드의 유지보수는 지극히 코드 중심적으로 이루어졌을 것이다. 프로그래머는 지시에 따라 다음에 실행될 코드를 찾아가야만 했다.프로그램에게 기대하는 바가 커지면서 프로그램 또한 거대해진다. 코드를 작성하는 과정은 물론 해석하는 과정 또한 간결해져야 했다. 산발적으로 반복되는 부분을 수렴적인 형태로 응축하고, 코드를..
자료형, 메모리, 그리고 Python [2] (이하의 내용은 부정확한 부분이 많을 수 있습니다. 틀린 부분은 지적해주시면 감사하겠습니다.) Python의 사양(specifiaction)에서는 메모리 관리에 대해 추상적인 원칙만을 제공한다. 그러한 원칙 중 하나가 바로 private heap이다. private heap은 모든 Python 객체와 자료 구조를 포함하는데, 여기서 private heap은 아직 실재하는 영역이 아니다. 각 구현체가 실제적으로 구현하는 과정에서 구체화된다. 왜 "private"인가? Python은 개발자가 메모리를 명시적으로 관리하게 두기보다 그것을 은닉하려는 철학을 갖고 있다. 그래서 개발자가 직접적으로 접근할 수 없는 private heap과 그를 유일하게 관리하는 Python memory manager를 도입한다. ..
자료구조 높이 쌓아올려진 책에 대해 생각해보자. 각각의 책은 너무나 무거워서, 책탑의 중간에서 한 권을 빼낸다는 일은 불가능하다. 우리가 안전하게 꺼낼 수 있는 책은 탑 맨 꼭대기에 놓인 책뿐이고, 책을 얹을 때에도 맨 위에만 얹을 수 있다. 이것도 '스택(stack)'이라고 부를 수 있을까? 의견이 조금 갈릴 것 같다. 스택과 닮은 구석은 있지만 스택이라고 단언하기에는 마음에 걸리는 부분이 있는 것이다. 그렇다면 Python에서 list, append(), pop()으로 구현한 스택은 스택이 맞나? 어찌 되었건 pop(idx)를 통해 list의 가장 끝이 아닌 인덱스의 원소도 빼낼 수 있지 않나? 후입선출의 구조를 상호작용의 자유도 측면에서 제한해야만 스택일까? 사용자 측에서 후입선출의 특징만을 이용하고 있는 ..