코딩 스쿨 JavaScript

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

JavaScript 2009 (ES5)

JavaScript 2009 (ES5): ECMAScript 5의 주요 기능과 특징

  • *ECMAScript 5 (ES5)**는 2009년에 발표된 JavaScript 표준으로, JavaScript의 성능과 기능을 대폭 개선한 중요한 업데이트입니다. ES5는 개발자가 안전한 코드 작성유지보수를 쉽게 할 수 있도록 많은 기능을 추가했습니다. **엄격 모드(Strict Mode)**와 새로운 배열 메서드 등이 대표적인 기능으로, 오늘날 대부분의 브라우저와 환경에서 지원됩니다.

이 가이드는 ES5에서 도입된 주요 기능과 개선 사항을 다루고, 각 기능의 사용 예시를 제공합니다.


1. 엄격 모드 (Strict Mode)

엄격 모드는 JavaScript를 보다 엄격하게 해석하여, 잠재적인 오류를 미리 발견하고, 안전한 코드 작성을 돕는 기능입니다. **"use strict";**를 코드 상단에 추가하면 스코프 관리잘못된 변수 사용 등에서 보다 엄격한 검사를 수행합니다.

1.1. 엄격 모드의 사용법

"use strict";

x = 10;  // ReferenceError: x is not defined

1.2. 엄격 모드의 특징

  • 암시적 전역 변수 사용 금지: 변수를 선언하지 않고 사용하는 경우 오류 발생.
  • 삭제할 수 없는 속성 삭제 금지: delete 연산자로 객체의 속성 삭제 시 오류 발생.
  • 함수 파라미터의 중복 허용 금지: 중복된 매개변수 이름을 사용할 수 없음.

2. 배열 메서드 확장

ES5에서는 배열 처리를 더 쉽고 직관적으로 할 수 있도록 다양한 배열 메서드가 추가되었습니다. 이 메서드들은 배열의 순회, 필터링, 정렬 등을 간편하게 처리할 수 있게 해줍니다.

2.1. forEach()

  • *forEach()*는 배열의 각 요소를 반복적으로 처리할 때 사용됩니다.
const numbers = [1, 2, 3, 4, 5];
numbers.forEach(num => {
    console.log(num);
});

2.2. map()

  • *map()*은 배열의 각 요소를 변환하여 새로운 배열을 반환합니다.
const numbers = [1, 2, 3];
const squares = numbers.map(num => num * num);
console.log(squares);  // [1, 4, 9]

2.3. filter()

  • *filter()*는 배열의 각 요소에 대해 조건을 검사하고, 조건을 만족하는 요소들로만 새로운 배열을 생성합니다.
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers);  // [2, 4]

2.4. reduce()

  • *reduce()*는 배열의 모든 요소를 순회하면서 하나의 값으로 축약합니다.
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum);  // 10

2.5. some()every()

  • some(): 배열의 일부 요소가 조건을 만족하는지 확인.
  • every(): 배열의 모든 요소가 조건을 만족하는지 확인.
const numbers = [1, 2, 3, 4, 5];
console.log(numbers.some(num => num > 3));  // true
console.log(numbers.every(num => num > 0));  // true


3. 객체 메서드 확장

ES5에서는 객체 처리와 관련된 새로운 메서드들도 추가되었습니다. 이 메서드들은 객체의 속성에 대한 제어정보 접근을 더 쉽게 만듭니다.

3.1. Object.keys()

  • *Object.keys()*는 객체의 키 목록을 배열로 반환합니다.
const person = { name: 'Alice', age: 25 };
const keys = Object.keys(person);
console.log(keys);  // ['name', 'age']

3.2. Object.create()

  • *Object.create()*는 프로토타입을 지정하여 새로운 객체를 생성합니다.
const personPrototype = {
    greet() {
        console.log(`Hello, my name is ${this.name}`);
    }
};

const alice = Object.create(personPrototype);
alice.name = 'Alice';
alice.greet();  // Hello, my name is Alice

3.3. Object.defineProperty()Object.defineProperties()

  • *Object.defineProperty()*와 **Object.defineProperties()*는 객체의 속성을 정밀하게 제어할 수 있도록 합니다. 속성의 특성(writable, enumerable, configurable 등)을 정의할 수 있습니다.
const person = {};
Object.defineProperty(person, 'name', {
    value: 'Alice',
    writable: false  // 속성 값 변경 불가
});
console.log(person.name);  // Alice
person.name = 'Bob';  // 무시됨
console.log(person.name);  // 여전히 Alice


4. JSON 지원

ES5에서는 JSON 데이터 처리를 위한 **JSON.parse()**와 **JSON.stringify()**가 도입되었습니다. 이 두 가지 메서드는 JSON 형식의 데이터를 JavaScript 객체로 변환하거나, JavaScript 객체를 JSON 문자열로 변환하는 데 사용됩니다.

4.1. JSON.parse()

  • *JSON.parse()*는 JSON 문자열JavaScript 객체로 변환합니다.
const jsonString = '{"name": "Alice", "age": 25}';
const person = JSON.parse(jsonString);
console.log(person.name);  // Alice

4.2. JSON.stringify()

  • *JSON.stringify()*는 JavaScript 객체JSON 문자열로 변환합니다.
const person = { name: 'Alice', age: 25 };
const jsonString = JSON.stringify(person);
console.log(jsonString);  // '{"name":"Alice","age":25}'


5. Function.prototype.bind()

bind() 메서드는 함수의 this 값을 명시적으로 고정할 수 있도록 합니다. 이를 통해 콜백 함수나 이벤트 핸들러에서 **this**가 예상대로 동작하도록 만들 수 있습니다.

5.1. bind()의 사용 예시

const person = {
    name: 'Alice',
    greet() {
        console.log(`Hello, my name is ${this.name}`);
    }
};

const greet = person.greet.bind(person);
setTimeout(greet, 1000);  // Hello, my name is Alice


6. Object.freeze()Object.seal()

ES5에서는 객체를 동결하거나 봉인하여 변경을 막는 기능을 도입했습니다.

6.1. Object.freeze()

  • *Object.freeze()*는 객체의 속성 추가, 삭제, 수정완전히 금지합니다.
const person = { name: 'Alice', age: 25 };
Object.freeze(person);
person.age = 30;  // 무시됨
console.log(person.age);  // 25

6.2. Object.seal()

  • *Object.seal()*은 객체의 속성 추가와 삭제를 금지하지만, 속성 값의 수정은 허용합니다.
const person = { name: 'Alice', age: 25 };
Object.seal(person);
person.age = 30;  // 수정 가능
delete person.name;  // 무시됨
console.log(person);  // { name: 'Alice', age: 30 }


7. 프로퍼티 접근자

ES5에서는 객체의 속성에 접근하는 방식도 개선되었습니다. GetterSetter를 통해 속성 값을 동적으로 계산하거나, 속성 설정 시 특정 작업을 수행할 수 있게 되었습니다.

7.1. Getter와 Setter 예시

const person = {
    firstName: 'Alice',
    lastName: 'Doe',
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    },
    set fullName(name) {
        [this.firstName, this.lastName] = name.split(' ');
    }
};

console.log(person.fullName);  // Alice Doe
person.fullName = 'Bob Smith';
console.log(person.fullName);  // Bob Smith


요약

ES5는 JavaScript에서 매우

중요한 전환점이 된 버전으로, 여러 가지 기능을 통해 개발자가 안전하고 효율적인 코드를 작성할 수 있도록 도왔습니다.

  • *엄격 모드(Strict Mode)**를 도입하여 코드의 오류를 사전에 방지하고, 더 엄격한 문법을 강제.
  • 배열 메서드(forEach(), map(), filter(), reduce() 등)를 통해 배열 처리 로직을 간단하게 작성 가능.
  • 객체 메서드(Object.keys(), Object.create(), Object.defineProperty())로 객체의 속성에 대한 제어를 강화.
  • JSON 지원을 통해 JSON 데이터를 쉽게 처리할 수 있게 개선.
  • *bind()*를 통해 함수의 this 값 고정을 가능하게 하여, 콜백 함수나 이벤트 핸들러에서의 오류를 방지.

ES5의 기능을 잘 활용하면 안정적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com