이력

  • 2021.10.04 포스팅
  • 2021.11.25 사소한 수정
  • 2021.11.26 사소한 수정

모든 내용을 상세히 담으려 하지 않았습니다.
제가 모르는 부분이나, “이런 것도 있었어?” 하는 부분, 중요하다고 생각되는 부분,
다시 한번 되새기고 싶은 부분만 기록했습니다.
읽어주셔서 감사합니다.

8.1 자바스크립트 기준과 범위

  • js는 OOP 언어이다.
  • js는 스크립트 언어이다.
  • 스크립트 언어 환경에서 객체 지향 프로그램을 구현하며, 객체지향 환경에서 스크립트 언어로 프로그램을 구현한다.
  • OOP를 지원하는 방법은 언어마다 다르다. 사전 컴파일 언어와 스크립트 언어는 환경이 다르므로 구현 방법이 다르다. js도 마찬가지다.

8.2 빌트인

  • 브라우저가 html 파일의 처음부터 한줄씩 해석하다가, script 태그를 만나면 js 실행환경을 만든다. 실행환경을 만드는 과정을 렌더링(Rendering) 이라고 한다.
  • 렌더링을 완료하면 코드를 컴파일하고 실행한다.
  • 렌더링 과정에서는 “오브젝트 생성, 값 초기화, 연산자 설정"을 한다.
  • 렌더링 단계에서 만드는 것을 총칭해 “빌트인"이라고 하며, 크게 연산자, 데이터 타입, 오브젝트로 나눈다.
  • 빌트인은 프로그램이 실행되기 전에 생성되므로 프로그램에서 사용할 수 있다.
  • 빌트인에서 자바스크립트의 특징을 나타낸 것이 빌트인 오브젝트이다.
  • 빌트인 연산자
    • ++, –, +, -, ~, !, *, /, %, ==, !=, ===, !==, *=, /=, %= 등
  • 빌트인 데이터 타입
    • Undefined, Null, Boolean, Number, String
  • 빌트인 오브젝트
    • Global, Object, Function, Array, String, Boolean, Number
    • Math, Date, RegExp, JSON
    • Error 처리용(Error, EvalError, RangeError … )

8.3 빌트인 오브젝트

  • Global 오브젝트
    • 전체를 통해서 하나만 존재한다. 따로 선언된 script 태그에서도 글로벌 오브젝트를 공유한다.
  • Object 오브젝트
    • 오브젝트를 생성, 제어하며 대부부분의 빌트인 오브젝트에 상속된다.
    • 소스에서 중괄호 {} 를 작성하면 새로운 오브젝트를 생성해 반환한다.
  • Function 오브젝트
    • 함수 오브젝트를 생성 제어 한다.
    • function f() { } 를 작성하면 새로운 Function 오브젝트를 생성해 반환한다.
    • js는 Function 오브젝트로 시작해, Function 오브젝트로 끝난다고 해도 과언이 아니다.
  • Array 오브젝트
    • 배열을 생성, 제어 한다.
    • 대괄호 []를 작성하면 Array 오브젝트를 생성해 반환한다.
  • String 오브젝트
    • 문자열을 제어한다.
  • Number 오브젝트
  • Math 오브젝트
  • Date 오브젝트
  • RegExp 오브젝트
  • JSON 오브젝트

8.4 오브젝트 인식

  • 메소드로 데이터를 연결하려면 아래와 같은 순서로 처리하게 된다.
1
2
3
4
5
6
1. 연결 기능을 가진 메소드를 선택합니다.
2. 메소드가 속한 오브젝트를 선택합니다.
3. 파라미터로 넘겨 줄 데이터를 준비합니다.
4. 데이터 타입에 따라 오브젝트를 생성합니다.
5. 오브젝트 메소드 형태로 호출하면서 연결하려는 값을 파라미터로 넘겨줍니다.
6. 메소드가 실행되며 메소드에서 값을 반환합니다.
  • 위의 흐름을 전형적인 객체 지향 형태로 코딩하면 아래와 같다.
  • 해당 오브젝트를 만들고, 그 오브젝트의 메소드를 호출하게 된다.
1
2
3
4
5
6
7
var obj = new String();
var result = obj.concat('sports', 'soccer', 11);
js.log(result);

obj = new Array();
result = obj.concat('sports', 'soccer', 11);
js.log(result)
  • 자바스크립트 형태는 아래와 같이, 오브젝트를 생성하지 않고도 메소드를 호출해서 사용할 수 있다.
1
2
3
4
5
var result = 'sports'.concat('soccer'), 11);
js. log(result);

result = ['sports'].concat('soccer', 11);
js.log(result);
  • 메소드 호출시, 오브젝트.메소드(), 에서 오브젝트의 위치에 작성항 데이터 타입에 의해 오브젝트가 결정된다. 전형적인 객체지향 프로그램과 형태가 다르다.
  • 데이터 타입에 의해 오브젝트가 속한 메소드가 호출되는 메커니즘을 뒷받침하는 것이 빌트인 타입, 빌트인 오브젝트입니다.

8.5 prototype 오브젝트

  • prototype을 사용하여 오브젝트에 메소드를 연결한다. 이 외에도 다른 오브젝트를 상속받아 연결하거나 prototype에 연결된 프로퍼티를 공유할 때 사용한다.

8.6 new 연산자

  • 인스턴스를 생성해 반환한다.

    구분타입데이터(값)
    constructorFunction생성자
    파라미터any값(옵션)
    반환Object생성한 오브젝트
  • 파라미터로 넘겨줄 값이 없으면 new String;과 같이 소괄호를 작성하지 않아도 되지만, 소괄호 작성은 코등의 관례이다.

  • 일부 빌트인 오브젝트는 new 연산자를 사용하지 않고 생성자만 작성해도 오브젝트를 생성해 반환한다.(Function, Number …)

  • new 연산자로 인스턴스를 생성하면 원본 오브젝트의 prototype에 연결된 메소드를 인스턴스에서 공유(참조, Reference) 한다. 따라서 인스턴스의 메소드를 호출하면 원본 오브젝트의 prototype에 연결된 메소드가 호출된다.

  • fallback 메소드: 엔진 버전에 따라 지원하지 않는 메소드가 있다. 개발자가 이 메소드를 만들어 빌트인 오브젝트의 prototype에 연결해 사용할 수 있다. 이 메소드를 fallback 메소드라고 한다,

8.7 constructor

  • 생성자를 참조한다.(Global, Math, JSON 오브젝트를 생성자가 없어 인스턴스 생성이 불가)

8.8 instanceof 연산자