본문 바로가기

분류 전체보기

(153)
JavaScript - this와 호출, bind 자바스크립트에서의 함수의 this 키워드는 다른 언어들과 비교하여 조금 다르게 동작한다. 또한 strict mode 와 non-strict mode 사이에서도 조금 다르다. 호출 장소 대부분의 경우에 this의 값은 함수를 호출하는 방법에 의해 결정된다. 자바스크립트에서는 선언 때 결정되는 것이 있고, 호출할 때 결정되는 것이 있는데, this의 핵심은 호출하는 방법에 따라 결정된다는 것이 핵심이다. ES5는 함수의 this 값이 함수가 어떻게 호출되었는지 개의치 않고 설정할 수 있는 방법이 있는데, 바로 bind 메서드의 사용이다. 먼저 아래와 같은 객체를 만들어 실행해보자. var me = { name: 'beom seok', sayMyName: function() { console.log(this)..
Express - 템플릿 엔진 (Template Engine) 템플릿 엔진 웹페이지 구성 시 가장 기본적으로 쓰이는 마크업 언어인 HTML은 정적인 언어이다. 주어진 기능만 사용할 수 있으며, 직접 기능을 추가할 수 없다. 그러나 자바스크립트와 함께라면 가능하다. 예를 들어 HTML로 1,000개의 데이터를 모두 표현하고 싶다고 해보자. HTML만 사용한다면 일일이 직접 써서 넣어야 할 것이다. 그러나 자바스크립트로 표현하면 반복문으로 아주 간단하게 처리할 수 있다. 템플릿 엔진은 자바스크립트를 사용하여 HTML을 렌더링할 수 있게 해준다. 따라서 기존 HTML과 문법이 살짝 다를 수도 있고, 자바스크립트 문법이 들어가기도 한다. 템플릿 엔진에는 대표적으로 퍼그 (Pug), 넌적스 (Nunjucks), EJS, Handlebars 등이 있다. 퍼그는 사용법이 아주 ..
Express - req, res 객체 익스프레스의 req, res 객체는 기본적으로 http 모듈의 req, res 객체를 확장한 것이다. 기존 http 모듈의 메서드는 물론 익스프레스가 추가한 메서드나 속성을 이용할 수도 있다. 예를 들어 res.writeHead, res.write, res.end 메서드를 그대로 사용할 수 있으면서도 res.send 또는 res.sendFine 등의 메서드도 쓸 수 있다. 다만 익스프레스의 메서드가 워낙 편리하기 때문에 기존 http의 메서드들은 잘 사용되지 않는다. 익스프레스가 많은 속성과 메서드를 추가했지만, 자주 쓰이는 것 위주로 살펴보자. 먼저 req 객체를 살펴보자. req.app: req 객체를 통한 app 객체로의 접근이다. 예를 들어 req.app.get('port')와 같은 식으로 사용할..
Express - 라우터 (Router) 익스프레스를 사용하는 이유 중 하나가 라우팅을 깔끔하게 관리할 수 있다는 점이다. 예를 들어, app.js에서 app.get 같은 메서드가 라우터 부분이다. 그러나 라우터를 많이 연결하면 app.js 코드가 매우 길어진다. 익스프레스에서는 라우터를 분리할 수 있는 방법을 제공한다. routes 폴더를 만들고 그 안에 index.js와 user.js를 다음과 같이 작성해주자. // routes/index.js const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.send('Hello, Express'); }); module.exports = router; // routes/..
12. 그래프 기초 (Graph Basics): 파이썬 자료구조와 알고리즘 그래프란 여러 노드 (node, 또는 정점, vertex) 들이 간선 (edge, 또는 아크, arc) 으로 연결된 추상 네트워크를 뜻한다. 가장 기본적인 용어들부터 알아보도록 하자. 용어 그래프 그래프는 아까 말했듯 여러 노드와 간선으로 연결된 추상 네트워크를 뜻한다. 즉, 그래프는 노드와 간선의 집합으로 정의되며 이를 수식으로 쓰면 다음과 같다. G는 그래프 (graph), V는 노드 (vertex) 의 집합, 즉 아래와 같은 그래프에선 {a,b,c,d} 이고, E는 간선 (edge) 의 집합, 즉 노드 쌍들의 집합이며, 아래와 같은 그래프에선 {{a,b}, {b,c}, {c,d}, {d,a}}이다. 그래프의 방향 그래프에는 방향이 있는 유향 (directed) 그래프와 방향이 없는 무향 (undir..
11. 동적 계획법 (Dynamic Programming): 파이썬 자료구조와 알고리즘 동적 계획법 (dynamic programming) 은 복잡하 문제를 재귀를 통해 간단한 하위 문제로 분류하여 단순화하여 해결하는 방법이다. 어떤 문제가 최적 부분 구조 (optimal substructure) 와 중복되는 부분 문제 (overlapping subproblem) 를 갖고 있다면 동적 계획법으로 해결할 수 있다. 최적 부분 구조는 답을 구하기 위해서 했던 계산을 반복해야 하는 문제의 구조를 말한다. 동적 계획법을 사용하려면 먼저 최적 부분 구조가 있는지 확인해야 한다. 동적 계획법은 부분 문제를 풀고 결과를 저장한 후 다음 부분 문제를 푸는 과정에서 저장된 결과를 사용한다. 메모이제이션 메모이제이션 (memoization) 은 프로그램이 동일한 계산을 반복할 때 이전에 계산한 값을 메모리에..
탐욕법 (Greedy Algorithm) 탐욕법 (Greedy Algorithm) 은 최적해를 구하는 상황에서 사용하는 방법이다. 여러 경우 중 하나를 선택하고 싶은 경우, 각 상황마다 그 상황에서 가장 좋다고 생각하는 것을 선택해 나가는 방식으로 진행하여 답을 구하는 알고리즘이다. 그러나 그 상황에서 가장 좋다고 생각하는 것이 무조건적으로 가장 좋은 결과를 얻는 것은 당연히 아니다. 예를 들어 위와 같은 상황에서 0에서 시작했을 때 탐욕법을 사용하면 첫 번째 선택에서 가장 큰 결과값인 10의 경로를 택할 것이고, 그 다음 선택에서 가장 큰 결과값인 40의 경로를 택하여 총 50의 보상을 받게되지만, 실제 가장 큰 보상을 받을 수 있는 경로는 5를 선택한 후 100을 선택하는 경로이다 (최적의 해). 그러나 탐욕법은 최적의 해와 근접한 답을 주..
10-2. 검색 연습문제 (Searching Examples): 파이썬 자료구조와 알고리즘 행렬 검색 각 행과 열이 정렬되어 있는 행렬에서 한 항목을 검색한다고 해보자. 즉 모든 행은 왼쪽에서 오른쪽으로, 모든 열은 위에서 아래로 첫 번째 항목을 기준으로 정렬 (오름차순) 되어 있다. 예제 리스트는 아래와 같다. m1 = [ [1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15] ] 책의 정답: matrix = [ [1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15] ] def search_matrix(m1, value): found = False row = 0 col = len(m1[0]) - 1 while row = 0: if m1[row][col] =..