본문 바로가기

전체 글

(35)
Function Scope(ES5) vs Block Scope(ES6) 두 scope의 차이를 더 명확하게 알려면, 자바스크립트가 어떻게 자신이 엑세스 할 수 있는 변수를 어떻게 찾가는 지, 실행하는 원리가 어떠한지 알 필요가 있습니다. 자바스크립트의 작동에 필요한 내부 구조에 대해서 알아봅시다. 실행 문맥의 구성 (Execution Context) 자바스크립트는 실행에 필요한 정보를 저장하는 공간이 있습니다. 바로 실행문맥입니다. 실행문맥은 크게 2가지로 나뉩니다. LexicalEnvironment : 블록의 유효범위 안에 있는 식별자와 그 값이 존재하는 공간. 변수 및 함수를 저장하는 실행공간입니다.(블록 외부도 유효공간입니다. 전역변수를 생각해 보세요.) ThisBinding : 함수를 호출한 객체의 참조가 저장되는 공간. 우리가 잘 아는 this를 말합니다. Lexi..
Single-Thread Server VS Multi-Thread Server Single-Thread Event Loop Model, Node.js JSP, Spring 등은 멀티스레드를 이용해서 requset와 response를 처리한다. 그리함으로서, 동시발생적인 사용자들을 잘 처리할 수 있기 때문이다. 우리가 평소 사용하던 많은 웹 애플리케이션들은 멀티스레드기반이 더욱 친숙하다. 하지만, Node.js는 싱글스레드 기반 이벤트 루프 구조를 선택했다. 이벤트 루프 덕분에, 싱글스레드이지만 동시발생적인 사용자들을 잘 처리할 수 있게 된다. Multi-Thread Request-Response Model(Synchronous) Steps 클라이언트는 웹서버에 request를 보낸다. 웹서버는 무한 루프를 돌면서 클라이언드의 리퀘스트를 기다리는 중이다. 웹서버는 내부적으로 제한된 ..
자바스크립트와 다른언어의 차이점 Javascript와 다른언어와 차별점 1. 자바스크립트는 동적 프로토 타입 기반 객체 지향언어이다. 객체지향언어에는 2가지의 큰 틀이 있다. 클래스 기반 객체지향언어 프로토타입 기반 객체지향언어 우선, 자바스크립도 객체지향언어라는 걸 잊지 말아야 한다. 하지만, Java와 다르게 클래스라는 개념이 없다. ECMAScript5에서 많은 라이브러리가 클래스를 지원한 것처럼 보이게 하는 것들이 있다. 하지만 주의해야한다. 클래스 기반 언어와 다르다(C++, Java) JS의 프로토 타입과 상속에 대해서는 다음 문서를 참고 https://sdcodebase.tistory.com/21?category=861404 자바스크립트의 프로토타입 JS의 프로토 타입 프로토 타입은 JS와 클래스 기반 객체지향언어와 크게 ..
자바스크립트의 프로토타입 JS의 프로토 타입 프로토 타입은 JS와 클래스 기반 객체지향언어와 크게 차이를 주는 부분이다. 프로토타입은 상속과 멤버 함수 추가등에 많이 쓰인다. 각각에 대해서 알아보도록 한다. 1. 생성자 안에서 메서드를 정의하는 방식의 문제점 JS는 생성자 안에 다음과 같이 모든 메서드를 입력할 수 있다. 하지만, 아주 치명적인 문제가 발생한다. 생성자로 생성한 모든 인스턴스에 똑같은 메서드가 추가된다. 생성한 인스턴스만큼 같은 작업을 하는 메서드가 추가된다 . 메모리가 크게 낭비 된다. 2. 프로토 타입 객체 프로토타입 객체를 이용하면, 생성자 안에 있는 프로토타입 프로퍼티가 외부에 정의된 객체 하나를 가리킨다. 그리고 그 프로토타입 객체에 prototype키워드로 지정한 함수들을 저장하는 것이다. 결국, 인스..
BOJ-11723)집합 집합 - boj.kr/11723 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include #include using namespace std; int main(void){ ios_base::sync_with_stdio(false); cin.tie(false); int m, s = 0; cin >> m; string order; int x; for (int i = 0; i > order; if (order == "add") { cin >> x; x--; s = (s | (1 x; x--; s = (s&(~(1 x; x--; int num = (s&(1
Bitmask(비트마스크) 설명 비트마스크(Bitmask) 비트마스크는 간단하게 말하자면, 집합의 표현을 비트로 표현하는 것이다. 예로 들어, 집합 A = {1,3,5,6,7}가 있다고 하자, 비트마스크를 모른다면, bool타입의 array를 이용해서 true, false 체크를 할 것이다. 하지만, 비트마스크를 이용한다면, 아주 간단하게 표현 할 수 있다. 다음 Bool Array에서 T는 해당 원소가 있음을 뜻하고, F는 없음을 뜻한다. 집합 A를 비트마스크를 이용해서 표현해보자. 가장 큰 수가 7이니, 0-7까지 집합의 원소가 있음을 1로 표현하고 없음을 0으로 표현하면, 원소 7이 있음 -> 1, 원소 6이 있음 -> 1 원소 5가 없음 -> 0 ...원소 0이 없음 ->0 으로 표현 할 수 있다. 그렇다면, 이 0과 1의 모음..
BFS 문제 분석-2(촌수계산) 1. 촌수계산 문제 분석(boj.kr/2644)이 문제도 사실 미로찾기 문제와 다를게 없다. 방문체크를 노드기준으로 한다는 것과 다르게. 입력된 상태를 노드로 표현하면 다음과 같다. 이제 BFS를 해야한다. 시작하는 위치는 두 사람의 어느곳이든 상관없다. 나는 7에서 시작한다고 가정하겠다.그렇다면, BFS(7)로 탐색이 시작된다.미로탐색에서 쓰였던 방법처럼, 현재 노드까지의 최단경로에서 +1을 다음노드에 해준다. 7과 연결된 노드는 2와 8이다. 결과적으로 1+1이 된다. 7과 연결된 노드가 모두 방문되면, 다음 노드(q.front())를 꺼내서 연결된 노드를 방문한다. 2와 연결된 노드는 1, 7, 8, 9이다. 하지만 7은 방문되었으므로, 생각치 않는다. 1, 8 ,9의 방문체크를 2+1로 해준다. ..
BFS 문제 분석-1(미로탐색) 1. 미로탐색 문제 분석(boj.kr/2178) 이번 문제는 사실 크게 어렵지 않다. 간단한 방법으로 풀 수 있다. 우선, edge는 미로에서 이동할 수 있는 루트를 2차원 배열로 만들어야 한다. visited를 2차원 배열로 만들어야 한다. 우리가 DFS에서 했던 어떤 문제는 1차원 배열의 형태로 만들었다. 그 이유는, 각 노드에 대한 방문이다. 하지만 여기서는, 각 노드에 대해서 방문하는게 아니라, 배열의 위치를 방문하는 것이다.우리는 (1,1)에서 최종 목표로 갈 수 있는 최소 칸수를 구해야 한다. 그래서 탐색을 (1.1)에서 시작한다.화살표의 의미는, 이 바로 다음에 설명하도록 하겠다.아, 너무 당연하지만 0이면 방문하지않음, 0이 아니면 방문했음을 표현했다.현재 상태는, (1,1)에서 방문을 시..