Programing/Javascript

Programing/Javascript

Map 과 Set 에 대하여..

예전부터 궁금했던 부분인데, 알고리즘 문제를 풀이하면서 이용하게 되어 그런김에 한번 포스팅해보고자 한다. 그리구 앞으로도 좀 문제들을 풀다가 배운 내용이 있으면, 배운 정도에 한해서 블로그 포스팅을 해보는게 좋겠다 싶어서 다른 내용들도 곧 포스팅 해보겠다. Map은 객체와 다른가? 알고리즘 문제를 풀다보면 시간복잡도를 신경쓰지 않을 수가 없다. 그리고 시간복잡도가 가장 민감하게 다뤄지는것은 결국 반복업무인데, 예를 들어서 배열 [1, 2, 3, 4, 5] 에서 1을 찾고 싶을 때, 가장 배열 앞에 존재하기 때문에, 하나를 찾고 바로 반복문을 나오게 된다면(break) 시간복잡도는 O(1) 이겠지만, 5를 찾는 경우 처음부터 끝까지 검색을 해야하기에, 배열의 길이 n 만큼의 시간복잡도 O(n) 이 나오게 ..

Programing/Javascript

[Deep Dive] This

22-1. this 키워드 객체는 객체의 상태를 나타내는 프로퍼티와 그 상태를 참조하고 수정할 수 있는 메서드로 이루어진 논리적인 자료 구조라고 배웠다. 여기서 동작을 나타내는 메서드는 자신이 속한 객체의 프로퍼티를 참조할 수 있어야 하는데, 이떄는 먼저 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다. 문제는 생성자 함수인데, 다음 경우를 살펴보자 function Circle(radius){ ????.radius = radius; } Circle.prototype.getDiameter = function(){ // 이 시점에서는 생성자 함수 자신이 생성할 인스턴스를 가리키는 식별자를 알 수 없다. return 2 * ????.radius; }; // 생성자 함수로 인스턴스를 생성하려면 먼저..

Programing/Javascript

[Deep Dive] 프로토타입 - instanceof ~

19-10. instanceof 연산자 객체 instanceof 생성자 함수 우변의 생성자 함수의 prototype에 바인딩된 객체가 좌변의 객체의 프로토타입 체인 상에 존재하면 true, 아니라면 false 로 평가된다. 예제로 살펴보자 // 생성자 함수 function Person(name) { this.name = name; } const me = new Person('Lee'); // 프로토타입으로 교체할 객체 const parent = {}; // 프로토타입으로 교체 Object.setPrototypeOf(me, parent); console.log(Person.prototype === parent); // false console.log(parent.constructor === Person);..

Programing/Javascript

[Deep Dive] 프로토타입 - 프로토타입의 생성시점~

저번 프로토타입의 기본 개념에 이어서 포스팅을 이어가보자 19-5. 프로토타입의 생성 시점 프로토타입은 생성자 함수가 생성되는 시점에 더불어 생성된다. 계속해서 이어지는 내용인데, 결국 생성된 객체와 생성자 함수, 그리고 프로토타입 객체는 모두 유기적으로 연결되어 있기 때문이다. 생성자 함수가 이미 빌트인으로 주어지는 것이 있고(예를 들면 Object, Array....) 우리가 직접 생성자 함수를 만드는 경우가 있다. 이 경우 프로토타입은 언제 생성이 될까? 차이점이 있을 것 같다. 우선 우리가 직접 생성자 함수를 만드는 경우를 예를 들어보자 console.log(Person.prototype); // { constructor: f } // 생성자 함수 function Person(name){ this..

Programing/Javascript

[Deep Dive] 프로토 타입 - 프로토타입이란?

자바스크립트는 클래스 기반 객체지향 프로그래밍 언어보다 효율적이며 더 강력한 프로그래밍 능력을 지니고 있는 프로토타입 기반의 객체지향 프로그래밍 언어라고 한다. 문장 자체가 좀 와닫진 않았지만 자바스크립트가 객체지향 언어라는 점이라는 사실을 듣기는 하였지만, 그 이유에 대해서 잘 파악하지 못하였는데, 이번 기회에 좀 더 자세히 알아보려고 한다. 사실 이전부터 자바스크립트에 대해선 명령형 언어라고 파악하고 있었는데, 실상은 명령형, 함수형, 프로토타입 기반, 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어라고 하니.... 알아야 할 것들이 점점 더 늘어나는 느낌이다. 19-1. 객체지향 프로그래밍 객체 지향 프로그래밍은 여러개의 독립적 단위, 즉 객체의 집합으로 프로그램을 표현하려 하는 프로그..

Programing/Javascript

[Deep Dive] 전역 변수의 문제점

14-1 변수의 생명 주기 변수가 영원히 존재하지는 않는다. 변수가 영원히 존재한다면 한번 선언된 변수는 프로그램을 종료하지 않는 한 영원히 메모리 공간을 점유하게 된다. 한편 변수는 자신이 선언된 위치에서 생성되고 소멸한다. 보통 전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같지만, 함수 내부에서 선언된 지역 변수는 함수가 호출되고 생성되고 함수가 종료하면 소멸한다. 이전에 호이스팅에서 살펴 보았듯이, 변수 선언은 선언문이 어디에 있던지간에 상관없이 가장 먼저 실행된다고 배웠다. 다만 이는 엄밀하게 얘기하면 전역 변수에 한정된다. 함수 내부에서 선언한 변수는 함수가 호출된 직후에 함수 몸체의 코드가 한 줄 씩 순차적으로 실행되기 이전에 자바스크립트 엔진에 의해 먼저 실행된다. function f..

Programing/Javascript

[Deep Dive] 스코프

13-1 스코프 스코프(scope): 유효범위, 스코프는 특히 자바스크립트 내에서 변수 var 와 let, const 와의 구별에 밀접한 관계가 있다. 여기서 유효범위는 이전에 함수를 다루면서 경험한 적이 있는데, 함수의 매개변수는 함수 몸체 외부에서는 참조 할 수 없다고 했었다. 즉, 매개변수의 유효범위가 함수 몸체인것이다. 함수 매개변수는 함수 내에서 선언이 되었다. 변수가 함수 내에서 선언이 되었다는 것은, 아니 이렇게 표현하게 되는 이유가 있는데, 변수를 포함한 식별자가 어디에서 어느 위치에서 선언되는지에 따라 그 변수를 참조할 수 있는 범위가 결정되기 때문이다. 즉, 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유..

Programing/Javascript

[Deep Dive] 함수

12-1. 함수 객체와 더불어 함수는 자바스크립트의 핵심이자, 스코프, 실행 컨텍스트, 클로저, 프로토타입 등 모두 함수와 관련이 있다. 우리가 알고 있는 수학에서의 함수는 결국 입력(input) 을 받아 출력(output) 을 내보내는 과정이다. function add(x, y) { return x + y; } add(2,5); // 7 x, y 를 입력받아 내부 과정을 통해 x+y 를 출력한다. 위 표현방법은 자바스크립트에서의 함수 표현방법이다. 자바스크립트에서 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 위 그림을 참고하여, 함수는 내부로 입력을 전달받는 매개변수(parameter), 입력을 인수(argument), 출력을 반환값..

Yelihi
'Programing/Javascript' 카테고리의 글 목록