ECMAScript 객체 지향 기술

객체 지향 용어

객체

ECMA-262는 객체(object)를 '속성의 비정렬 집합, 각 속성은 원시 값, 객체 또는 함수를 저장합니다'라고 정의합니다. 엄격하게 말하면, 이는 객체가 특정 순서의 값을 배열로 간주한다는 것입니다.

ECMAScript는 객체를 정의할 때, 더 일반적인 정의는 코드의 명사(인간, 장소 또는 물체)의 표현입니다.

클래스

각 객체는 클래스 정의에 의해 구성되며, 클래스를 객체의 레시피로 볼 수 있습니다. 클래스는 개발자가 접근할 수 있는 인터페이스(interface)(속성과 메서드)뿐만 아니라, 객체의 내부 작동(속성과 메서드가 작동하는 코드)도 정의해야 합니다. 컴파일러와 인터프리터는 클래스 설명에 따라 객체를 구축합니다.

인스턴스

프로그램이 클래스를 사용하여 객체를 생성할 때, 생성된 객체는 클래스의 인스턴스(instance)으로 불립니다. 클래스가 생성하는 객체의 개수에 대한 유일한 제한은 코드를 실행하는 기계의 물리적 메모리입니다. 각 인스턴스의 행동은 동일하지만, 각 인스턴스는 독립된 데이터 집합을 처리합니다. 클래스를 사용하여 객체 인스턴스를 생성하는 과정을 인스턴스화(instantiation)이라고 합니다.

이전 장에서 우리는 ECMAScript가 공식적인 클래스가 없다고 언급했습니다. 대신, ECMA-262는 객체 정의를 객체의 레시피(object recipe)로 설명합니다. 이는 ECMAScript에서 객체 정의가 실제 객체 자체인 이유로, ECMAScript의 논리적 중재 방안입니다. 그러나 클래스가 정말 존재하지 않을 수 있지만, 대부분의 개발자가 이 용어에 익숙하며, 기능적으로 두 가지는 동일합니다.

객체 지향 언어의 요구사항

객체 지향 언어는 개발자에게 네 가지 기본 능력을 제공해야 합니다:

  1. 봉합 - 관련 정보(데이터나 메서드)를 객체 내에 저장할 수 있는 능력
  2. 집합 - 하나의 객체를 다른 객체 내에 저장할 수 있는 능력
  3. thừa kế - 다른 클래스(또는 여러 클래스)에서 클래스의 속성과 메서드를 얻을 수 있는 능력
  4. 다중형태 - 다양한 방법으로 실행할 수 있는 함수나 메서드를 작성할 수 있는 능력

ECMAScript는 이러한 요구를 지원하므로, 객체 지향적(object-oriented)으로 볼 수 있습니다.

객체의 구성

ECMAScript에서는, 객체는 속성(attribute)으로 구성되며, 속성은 원시 값 또는 참조 값을 가질 수 있습니다. 속성이 함수를 저장하면, 그것은 객체의 메서드(method)로 간주되며, 그렇지 않으면 속성은 객체의 속성(property)으로 간주됩니다.