[JavaScript] - 함수와 일급 객체 (Function and First-Class Object)
·
📜 Web Programming/JavaScript
일급 객체 다음의 조건을 만족시키는 객체를 "일급 객체"라고 한다. 함수는 다음의 조건을 모두 만족하기에 일급 객체이다. 무명의 리터럴로 생성 가능하다. 변수나 자료구조 등에 저장할 수 있다. 함수의 매개변수에 전달 가능하다. 함수의 반환값으로 사용할 수 있다. 함수는 일급 객체이기에 함수의 매개변수에 함수를 전달할 수 있고, 반환값으로 사용 가능하다. 이것이 일급 객체로서 함수가 가지는 가장 큰 특징이다. 함수 객체는 호출이 가능하며, 일반 객체에는 없는 함수 고유의 프로퍼티를 소유한다. 함수 객체의 프로퍼티 함수 또한 객체이기에 프로퍼티를 가질 수 있는데, 함수만이 가지는 특별한 프로퍼티가 존재한다. arguments, caller, length, name, prototype 프로퍼티들이다. 함수 객..
[JavaScript] - 생성자 함수에 의한 객체 생성
·
📜 Web Programming/JavaScript
객체 생성 방법은 여러 가지가 있다. 이번에는 객체 리터럴로 생성하는 방법이 아닌, 생성자 함수를 사용하여 객체를 생성하는 방식에 대해 알아보도록 하겠다. 이때, 생성자 함수란 new 연산자와 함께 호출하여 객체를 생성하는 함수를 말한다. 생성자 함수에 생성된 객체를 인스턴스라고 한다. (빌트인)생성자 함수의 종류로는 Object, String, Number, Boolean, Function, Array, Date, RegExp, Promise 등이 있다. Object 생성자 함수 new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체가 생성되고, 빈 객체를 생성한 이후에는 프로퍼티와 메서드를 추가할 수 있다. // 빈 객체 생성 const person = new Object(); // 프로퍼..
[JavaScript] - 프로퍼티 어트리뷰트 (Property Attribute)
·
📜 Web Programming/JavaScript
내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위한 의사 프로퍼티와 의사 메서드로 [[ ... ]] 방식으로 이중 대괄호로 감싼 이름들이 내부 슬롯과 내부 메서드이다. 내부 슬롯과 내부 메서드는 개발자가 직접 접근하거나 호출할 수는 없다. 다만 일부 내부 슬롯과 내부 메서드에 한해 간접적으로 접근할 수 있다. 프로퍼티 어트리뷰트 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태(프로퍼티 값, 값의 갱신 가능 여부, 열거 가능 여부, 재정의 가능 여부)를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다. 즉, 프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 슬롯(프로퍼티의 상태를 나타낸다)이다. 프로퍼티 어트리뷰트는 다음과 같다. [[..
[JavaScript] - let, const 키워드와 블록 레벨 스코프
·
📜 Web Programming/JavaScript
var 키워드의 문제점 ES5까지에서는 var 키워드를 사용해야만 변수를 선언할 수 있었다. 그러나 var 키워드에는 여러 가지 문제점들이 있는데 그 문제점들에 대해서 알아보도록 하겠다. 변수 중복 허용 var 키워드로 선언한 변수는 중복 선언이 가능하다. 초기화문이 있는 변수 선언문은 자바스크립트 엔진에 의해 var 키워드가 없는 것처럼 동작하고, 초기화문이 없는 변수 선언문은 그대로 무시된다. 즉, 에러를 발생시키지 않고 자바스크립트 엔진이 자체적으로 재할당하거나 무시해버리는 것이다. 이는 예기치 못한 부작용을 발생시킬 수 있다. 함수 레벨 스코프 var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 함수 외부에서 var 키워드로 선언한 변수는 모두 전역 변수가 된다. ..
[JavaScript] - 전역 변수의 문제점
·
📜 Web Programming/JavaScript
변수의 생명 주기 변수는 생성되고 소멸되는 생명 주기(Life Cycle)가 있다. 전역 변수의 생명 주기는 프로그램의 생명 주기와 같으며, 지역 변수의 생명 주기는 그 지역 변수가 선언된 함수가 호출되면 생성되고 함수가 종료되면 소멸한다. 지역 변수의 생명 주기는 함수의 생명 주기와 일치한다. 전역 변수의 문제점 프로그램을 설계할 때 전역 변수를 사용하지 않는 것이 좋다. 그 이유는 다음과 같다. 암묵적 결합: 모든 코드가 전역 변수를 참조하고 변경할 수 있는 것을 말한다. 변수의 유효 범위가 클수록 오류의 가능성도 높아진다. 긴 생명 주기: 전역 변수는 생명 주기가 길고, 메모리 리소스도 오랫동안 차지하게 된다. 이는 전역 변수의 상태를 변경할 수 있는 시간도 길다는 것을 의미한다. 이로 인해 의도치..
[JavaScript] - 스코프 (Scope)
·
📜 Web Programming/JavaScript
스코프 (Scope) 스코프란 식별자가 유효한 범위이다. 모든 식별자는 "자신이 선언된 위치"에 의해 다른 코드가 식별자를 참조할 수 있는 유효 범위가 결정되는데 이것이 바로 스코프인 것이다. 스코프 개념이 없으면 같은 이름을 가지는 변수를 사용할 수 없게 된다. 그 이유는 같은 이름을 갖는 변수는 충돌을 일으키기 떄문이다. 스코프라는 유효 범위를 통하여 식별자인 변수 이름의 충돌을 방지할 수 있다. 스코프 내에서는 식별자가 유일해야 하지만, 다른 스코프에서는 같은 이름의 식별자를 사용할 수 있다. 스코프는 "네임스페이스"이다. 스코프의 종류 코드는 전역(Global, 코드의 가장 바깥 영역)과 지역(Local, 함수 몸체 내부)으로 구분되는데, 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위인 스..
[JavaScript] - 함수 (Function)
·
📜 Web Programming/JavaScript
함수 개념 프로그래밍에서 함수는 일련의 과정을 "문(Statement)"로 구현하고 코드블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 쉽게 말하면 길고 더러운 코드를 한 단어로 축약한 것이다. // 함수 정의 function sum(x, y) { return x + y; } // 함수 호출 sum(2, 5); // 7 자바스크립트의 함수는 객체 타입의 값이며 여러 개 존재할 수 있고, 함수 또한 함수 리터럴로 생성할 수 있다. 입력값인 "인수(argument)"를 함수에 전달하여 함수를 호출하고, 호출된 함수는 코드블록의 문들을 일괄적으로 실행한 후 "반환값(return value)"을 반환한다. 함수의 구성요소는 다음과 같다. function 키워드 함수 이름: 함수 이름은 식별자이며, 함수 몸체..
loading