본문 바로가기
반응형

Programming/JavaScript14

JavaScript 프로토타입이란 1. 생성자 함수로 인스턴스를 생성하게 되면, 변수와 메소드를 중복 소유하는 현상이 발생하게 된다. 이는 중복에 의한 불필요한, 메모리 낭비가 발생하게 되어 프로그램의 성능을 저하시키는 원인이 된다. 자바스크립트는 프로토타입 prototype을 기반으로 하여 상속을 구현한다. 생성자 함수가 생성하는 모든 인스턴스는 인스턴스 자신의 상위 객체인 생성자 함수의 prototype을 상속받게 된다. 다시, 모든 객체는 [[Prototype]]이라는 내부슬롯을 가지고 있다. 모든 객체는 '__proto__' 접근자 프로퍼티를 통해서 자신의 프로토타입, 즉 [[Prototype]] 내부 슬롯에 간접적으로 접근할 수 있다. 일반 적인 객체의 프로토타입은 다음과 같다. person 객체의 [[Prototype]] 내부.. 2021. 10. 29.
JavaScript global variable을 최소로 사용해야 하는 이유 전역변수 사용의 문제점 자바스크립트에서 전역변수는 전역객체의 생명주기와 일치한다. 즉 프로그램이 실행될 때 생성되고, 종료될 때 메모리를 반환한다. 이러한 특성 때문에, 전역변수를 사용하는 것은 다양한 문제점을 내재하고 있다. 1. 암묵적 결합 모든 스코프에서 전역변수에 접근이 가능하다. 즉 모든 지역에서 변수가 변경될 위험이 도사리고 있는 것이다. 주의깊지 못한 코드를 작성해서 전역변수의 값이 변경된다면 프로그램 자체가 destroy될 가능성을 가진다. 2. 전역변수는 생명주기가 길다. 함수 내 지역변수와는 다르게 전역변수의 생명주기는 전역객체와 동일하다. 즉 메모리가 한번 할당되면, 반환이 안된다는 것이다. 이는 리소스 낭비를 불러일으키는 주범이 된다. 전역변수 선언을 남발하다보면, 메모리 공간을 불.. 2021. 10. 27.
JavaScript 기초 문법 #6 프로퍼티, 함수 일급객체, 프로토타입, 빌트인 객체, this, 실행 컨텍스트, 렉시컬 스코프, 클로저 # 프로퍼티 attribute 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 attribute를 기본값으로 자동 정의한다. # 함수 일급객체 다음 조건을 만족하는 객체를 일급객체라 한다. 무명의 리터럴로 생성할 수 있다. 런타임에 생성이 가능하다. 변수나 자료구조(객체, 배열)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. # 객체란? 객체는 상태 데이터와 동작을 하나의 논리적인 단위로 묶어 놓은 복합적인 자료주고라고 할 수 있다. 객체의 상태 데이터를 프로퍼티, 동작을 메서드라 부른다. 생성자 함수의 프로토타입은 상속을 위해 사용된다. 모든 객체는 __proto__ 접근자 프로퍼티를 통해 자신의 프로토타입, 즉 [[Prototy.. 2021. 10. 25.
JavaScript 기초 문법 #5 let, const 변수 let 변수 var 키워드의 단점을 보완하기 위해 ES6에서 적용된 키워드가 let, const 변수 키워드다. let 키워드로 선언한 변수는 중복 선언시 systax error를 반환한다. let 벼수는 모든 코드블록을 지역 스코프로 인정하는 블록 레벨 스코프를 따른다. var 키워드가 암묵적으로 선언단계와 초기와 단계에서 undefined로 초기화 되는것과는 다르게, let 변수는 선언단계와 초기화 단계가 분리되어 진행된다. 즉, 선언단계는 자바스크립트 엔진에 의해 암묵적으로 실행되지만, 초기화 단계는 변수 선언문에서 실행되는 것이다. let 변수를 선언하고, 초기화 단계 전까지는 참조가 불가능한데, 이 구간을 일시적 사각지대(Temporal Dead Zone TDZ) 라고 부른다. const 변수 .. 2021. 10. 20.
JavaScript 기초 문법 #4 함수 스코프, 전역변수 문제점 # 자바스크립트 스코프 함수 스코프를 결정하는 방법은 두가지다. 1. 함수 호출시점 2. 함수 정의시점 자바스크립트에서는 함수 정의시점에 따라 상위 스코프를 결정한다. 함수가 호출된 위치는 상위 스코프 결정에 어떤 영향도 주지 않는다. 함수의 상위 스코프는 언제나 자신이 정의된 스코프다. # 전역 변수 전역 변수의 무분별한 사용은 위험하다. 변수값이 변경되면서 프로그램 전체가 무너질 수 있기 때문이다. 모든 변수는 생명주기가 있다. 생성되어 메모리 공간을 점유하고, 변수가 소멸되면서 메모리 공간을 반납하는 주기가 있다. 전역 변수의 경우 자바스크립트 엔진에 의해 먼저 실행되어 undefined로 정의 되지만, 지역변수 지역 변수의 생명 주기는 함수의 생명주기와 정확히 일치한다. 변수의 생명 주기는 메모리.. 2021. 10. 20.
JavaScript 기초 문법 #3 제어문, 객체, 함수 # 원시타입과 객체 타입의 차이점 원시타입의 값은 변경 불가능한 값이다. 객체 타입 값은 변경 가능한 값이다. 원시값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제값이 저장된다. 객체를 변수에 저장하면 변수(확보된 메모리 공간)에는 참조값이 저장된다. 원시값의 변수를 다른 변수에 할당하면 원본의 원시값이 복사되어 전달된다. 객체 변수를 다른 변수에 할당하면 원본의 참조값이 복사되어 전달된다. 변수와 같은 식별자Identifier는 값이 아니라 메모리 주소를 기억한다. 즉 식별자는 메모리 주소에 붙인 이름이라고 할 수 있다. 원시값을 갖는 변수를 할당하면, 두 변수의 원시 값은 서로 다른 메모리 공간에 저장된 별개의 값이 된다. 어느 한쪽에서 값을 변경하더라도, 간섭이 발생하지 않는다. 객체는 프로.. 2021. 10. 14.
반응형