[코드스피츠] ES6+ 기초편 1

sangeun·2020년 1월 5일
0

코드스피츠

목록 보기
1/3

프로그램이란?

컴파일 프로그램

컴파일 언어 프로그램의 생명주기는 Language Code(Lint Time) -> Machine Language(Compile Time) -> File -> Load -> Run(Run time) -> Terminate 이다. Load되어 컴퓨터에 올라간 것을 프로그램이라고 한다.

스크립트 프로그램

스크립트 언어 프로그램의 생명주기는 Language Code -> File -> Load -> Machine Language -> Run -> Terminate 이다. 일반 프로그램과는 달리 컴파일이 되지 않고 로드된 후에 컴파일을 하고 실행된다.
자바스크립트도 스크립트 언어이기 때문에 코드를 브라우저에 로딩하고 로드가 끝난 다음에 컴파일을 하고 실행한다.

런타임?

메모리

코드는 명령부분과 데이터부분으로 나눠져서 메모리에 적재된다.

CPU

CPU는 4가지로 구성된다.

  • 외부 입출력 인터페이스(캐시 레이어, 외부 버스): 메모리로부터 명령을 전달받고, 캐싱하거나 자신의 CPU에 맞는 명령으로 해석한다.
  • 제어유닛: 디코딩을 한다. 추상적인 명령을 CPU가 알 수 있는 명령으로 디코딩한다.
  • 연산유닛: 제어유닛과 데이터유닛에서 명령과 값을 받아와 연산한다.
  • 데이터유닛: 메모리의 데이터부분을 받아와서 연산유닛에 넘긴다.

그래서 런타임이란?
Load (메모리에 적재)
-> Run

  • instruction fetch(외부 버스에서 자신의 CPU가 이해할 수 있도록 명령을 바꿔준다.) & decoding (제어유닛에서 연산유닛이 알 수 있도록 디코딩)
  • Execution: 연산 유닛의 결과를 데이터유닛에 전달하고, 이것은 메모리에 전달된다.

Load->Run은 어떻게 진행?

컴파일 프로그램

컴파일러는 어떻게 메모리에 적재되지 않아서(로드가 되지 않음) 물리적인 메모리를 갖고있지도 않은 상태에서 코드를 검증하지?

  • 컴파일러가 language code를 해석할 때 가상 메모리 상에서 테스트를 해본 것이다. 코드가 검증되면 V테이블을 이용해 가상 메모리를 진짜 메모리와 매핑한다.

essential definition loading (프로그램 실행에 반드시 필요한 것들을 컴파일할 때 메모리에 적재)
-> v table mapping (로딩하고 실행하기 전에 가상 메모리와 진짜 메모리를 매핑)
-> run
-> runtime definition loading
-> run

이처럼 컴파일 시점에서 확정되는게 아니라 런타임에서 정의되기도 한다.

스크립트 프로그램

  1. 기본이 되는 함수들이나 클래스가 정의된다.
  2. 런타임에서도 위를 이용해 커스텀 함수들이나 클래스가 정의된다.

따라서 스태틱과 런타임이란 상대적인 것이다. 1번이 정의되어야만 2번이 정의될 수 있으므로 2번에게 1번은 static이 된다.

프로그램이 작동하는 방식

참조의 참조를 왜 쓰는가?

메모리, 주소, 포인터, 변수, 디스패치(주소로부터 값을 얻는 행위)가 존재한다.

A의 메모리 참조를 가지고 있는 B를 직접참조한 C가 있다. 여기서 B가 다른 메모리를 참조하더라도, C는 계속해서 자신은 B를 가지고 있다고 생각하고, 여기서 에러가 발생한다. 이처럼 참조를 복사하면 큰 문제가 일어난다.

함수형 프로그래밍에서는 참조를 사용하지 말도록 한다. 객체지향 프로그래밍에서는 직접참조하지 않도록 더블 디스패치로 해결한다.

자바스크립트의 특성

자바스크립트를 구성하는 텍스트 요소

  • control character: 제어문자
  • white space: 공백문자
  • line terminators: 개행문자
  • comments: 주석
  • keyword: 예약어(변수나 식별자로 사용할 수 없음)
  • literal: 더 이상 나눌 수 없는 객체나 값의 표현

자바스크립트 언어를 구성하는 요소

  • statememt: 문
    - 처리될때 처리를 위한 힌트로 사용하고 결과는 메모리에 남지 않는 것
    • 종류: 공문(" ;"), 식문, 제어문, 선언문(메모리 상에 변수를 할당하는 일. 주소, 타입, 크기를 v테이블에 기록해놓는다.)
    • 종류: 단문, 중문({}) ex) if의 구성요소는 if+(식)+문이어서 단문일 경우도 중문으로 묶지 않아도 실행된다.
  • expression: 식
    - 값식, 연산식, 호출식(함수 호출을 하면 값이 나옴)
    • 결과로 값이 나온다.
    • 식을 문으로 인정한다.
  • identifier: 식별자
    - 기본형, 참조형

흐름이란?

명령이 순서대로 실행되는 과정을 흐름이라고 한다. 원래 메모리에 적재되는 명령어를 수행하는 동안 간섭하지 못한다. 하지만 제어문을 이용해 flow control을 할 수 있다. 함수나 클래스를 이용해 sub flow도 만들 수 있다.

profile
꾸준히

0개의 댓글