분류 전체보기
[JavaScript_study] 프로토타입(Prototype)
* 프로토타입(Prototype)이란? 원형이라는 뜻 완성된 형태가 아닌 빠르게 스캐치한것, 실제 제품을 만들기전 대략적인 형태를 만들어낸것 또는 집합체안에 비슷한 특징들을 뽑아서 대략적인것을 나타내도록 만든것 배포전 단계에서 빠르게 만들어낸 어플리케이션을 프로토타입 어플리케이션이라고 말한다. 자바스크립트에서 프로토타입은 다양한 객체들간에 비슷한 특징을 클래스로 만든것처럼 즉, 생성자함수를 통해서 템플릿으로 만든것처럼 객체지향프로그래밍을 위해서 바로 이 프로토타입을 사용한다. 다양한 오브젝트들이 있다면 이들의 비슷한 점들을 하나의 프로토타입으로 만들어서 이 프로토타입을 이용해서 객체지향을 구현한다. * 자바스크립트란 프로토타입을 베이스로 한 객체지향 프로그래밍 언어이다. 객체지향 프로그래밍을 위해서 대부..
[JavaScript_study] 엄격 모드 (strict mode)
* 'use strict'; 엄격 모드 strict mode 리액트와 같은 프레임워트 사용시 기본적으로 엄격 모드임 엄격모드는 일반 이름을 제거하는 것을 금지합니다. 엄격 모드에서 delete name 은 구문 에러입니다. 변수 선언시 키워드 생략 불가(var, const, let) 함수 내부에서 this를 사용하면 undefined가 나온다. 파일 전체 혹은 특정 함수 및 블럭안에서만 엄격모드 사용 가능 * 엄격모드 예시 코드 'use strict'; function add(x) { var a = 2; var b = a + x; console.log(this); } add(1); const array = [1, 2, 3]; for (const num of array) { console.log(num); }
[JavaScript_study] var을 쓰지 말자
* var을 쓰면 안되는 이유 변수 선언 하는 키워드 없이 선언 & 할당이 가능함 선언인지, 재할당인지 구분하기 어려움 중복 선언이 가능함 블록 레벨 스코프가 안됨 함수 레벨 스코프만 지원됨 따라서 var는 쓰면 안됨, 일반 코딩 방식과 어긋나서 개발하면서도 멘붕이 온다. 코드의 가독성과 유지보수성에 좋지 않음 // 1. 변수 선언하는 키워드 없이 선언 & 할당이 가능함 // 선언인지, 재할당인지 구분하기 어려워요 something = '💩'; console.log(something); // 2. 중복 선언이 가능함 var poo = '💩'; var poo = '💩'; console.log(poo); // 3. 블록 레벨 스코프 안됨 ❌ var apple = '사과'; { var apple = '🍎'; ..
[JavaScript_study] 호이스팅 (Hoisting)
* 호이스팅(Hoisting) 자바스크립트 엔진(번역기, Interpreter)이 코드를 실행하기 전, 변수, 함수, 클래스의 선언문을 끌어 올리는 것을 말함 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮김 함수의 호이스팅은 함수의 선언문 전에 호출이 가능하게 해줌 함수의 선언문은 선언 이전에도 호출이 가능함 변수(let, const)와 클래스는 선언만 호이스팅이 되고, 초기화는 안된다. 초기화 전, 변수에 접근하면 컴파일(빌드) 에러가 발생한다. * 호이스팅(Hoisting) 예시 코드 print(); function print() { console.log('Hello'); } // 변수(let, const)와 클래스는 선언만 호이스팅이 되고, // 초기화는 안됨 // 초기화 전, 변..
[JavaScript_study] 렉시컬 환경(Lexical Environment)
* 실행 컨텍스트(Execution Context) 코드의 실행 순서와 스코프를 기억 자바스크립트 런타임안에 Call Stack이 있는데 Call Stack를 통해서 하나하나씩 코드의 실행순서를 기억한다. 자바스크립트는 단 하나의 싱글 컨텍스트 스택이 있다. 한번에 하나의 일만 처리 할 수 있다. * 어떻게 블럭안에 데이터가 있는지 없는지 확인하고 그리고 근접한 부모의 스코프를 찾는걸까??? 이유는 각각의 블록은 렉시컬 환경(Lexical Environtment)라는 내부 오브젝트를 가지고 있다. 그래서 각각 블럭 마다 어떤 변수들이 들어있는지 부모는 누구인지에 대한 정보를 가지고있는 오브젝트가 있다. 실행순서와 각각의 블럭에 대한 정보들을 한 오브젝트안에 데이터를 담아둔다. * 렉시컬 환경 내부 환경 ..
[JavaScript_study] 가비지 컬렉션 (garbage collection)
* 가비지 컬렉션 (garbage collection)이란? 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다. C언어는 개발자가 직접 메모리를 관리를 해야함 C#, GO, JAVA, JavaScript는 우리가 메모리 관리를 해줄 필요가 없다. 다 쓴 메모리도 우리가 직접 청소해줄 필요가 없다. Garbage Collection(GC)이 있기 때문이다. 어떤 경우에 메모리가 그대로 남아있는지 어떤경우에 GC에 의해서 나의 메모리가 정리되는지 알고 있어야 효율적인 메모리 어플리케이션을 만들 수 있다. GC는 object를 참고하고 있는 사람이 있는지 없는지 확인을 하고 있다가 아무도 해당 object를 가지고 있지 않다면 쓰레기로 간주해..