- 모던자바스크립트 딥다이브 1페이지~ 33페이지를 읽고 궁금한 내용을 찾아 공부한 내용입니다.
- "2.5 자바스크립트 특징" 참고
자바스크립트는 인터프리터 언어인가?
대부분의 모던 자바스크립트 엔진은 "인터프리터 장점"과 "컴파일러 장점" 을 결합하여 느리다는 인터프리터의 단점을 해결했다고 한다.*모던 브라우저에서 사용되는 인터프리터는 명시적인 컴파일 단계를 거치지 않지만, 일부 소스코드를 "컴파일"하고 "실행"한다.
*자바스크립트는 런타임에 컴파일되지만 실행파일이 생성되지 않고, 인터프리터를 통해 실행되기 때문에 컴파일러 언어라고 할 수는 없다.
(
* 현재 컴파일러와 인터프리터의 기술적 구분이 모호해져 가는 추세라고 합니다. 납득 완.
)
이게 무슨소리일까...
컴파일러 언어는 컴파일 단계와 실행 단계가 분리되어 있다.
그러니까 당연히 코드 실행속도가 상대적으로 빠르다는 장점을 가진다.
따라서, 인터프리터 언어의 실행속도는 컴파일된 기계어의 속도보다 느리다.
이 단점을 극복하기 위해,
자바스크립트 엔진 내부에서 실행 중 컴파일이 필요한 경우에 대해 일부 소스코드를 컴파일한다.
이렇게 필요할 때 컴파일하는 방법을 JIT(Just-In-Time) 컴파일 이라고 한다.
크롬 v8엔진의 경우,
인터프리터가 코드를 읽으며 실행하는 중에 컴파일이 필요한 코드를 컴파일한다.
코드 실행 중, 프로파일러가 지켜보며 반복실행되는 코드 블록 등을 만나면 최적화할 수 있도록 컴파일러에서 코드를 전달하게 된다.
(출처 : https://oowgnoj.dev/review/advanced-js-1 )
잠깐... 여기서 드는 또다른 의문....
그럼 JIT는 단점이 없나?
컴파일을 일부에 적용해서 기존 인터프리터 방식보다 빠르고, 수정도 용이하고... 넘좋은걸?
이 아래 부분은 더 깊게 팔 시간이 부족하여 생략 ㅜㅜ 제대로 이해못했음.나중에 궁금하면 추가로 더 공부해보자.
단점이라고 한다면, 반복되는 코드에서 컴파일을 통해 최적화를 할 수 있는데, 웹개발에서 사용되는 코드에는 반복되는 부분이 적다.그러니까, JIT컴파일러를 만들어놨지만 생각보다 호용이 적은 경우가.... 생긴다.
즉, 자바스크립트에서 JITC가 성능향상에 크게 기여하는 바가... 없다....?
하지만 자바스크립트로 비지니스 로직을 구현하는 프로그램들도 증가하는 추세이므로, 다시 완전한 인터프리터로 돌아갈 수는 없다.
이런 상황을 위해 채택하는 방식이 adapative JITC. 모든코드를 일괄 최적화 하지않고,
반복이 많은 코드에 adaptive로 최적화 수준을 적용한다.( 출처 : https://meetup.toast.com/posts/77 )
명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍 언어
명령형(Imperative) - 선언형(Declarative) 언어
- 명령형 언어의 프로그래밍은 "어떻게"를 설명한다.
- 길찾기라고 하면, 앞으로 300m가서 왼쪽으로 들어가서 앞으로 10m이동.
- 자바, c,c++, 자바스크립트, 파이썬 등
- 선언형 언어는 "무엇을" 할 지 정의한다.
- HTML이 선언형이다.
- 길찾기라고 하면 출발지: 서울시 어디동 어디구 어디건물 1101호, 도착지: 서울시 어디동 어디구 어디건물 1102호 이런식.
함수형(Functional)
- 함수형, 절차지향, 객체지향 등 프로그래밍 패러다임이라고한다.
- 원하는 목표에 따라 적절한 패러다임을 골라 사용해야 한다.
- 한 가지의 패러다임만을 사용한 개발자보다, 여러 패러타임을 이해하고 사용하는 개발자가 더 적절한 패러다임을 선택할 수 있다.
- 함수형 프로그래밍의 특징은 뭐가있을까?
- 순수함수 : 함수가 언제 선언되었는지, 어떤 값을 인자로 받던지 항상 일정한 값을 반환해야한다. 즉 외부에 전혀 영향을 받지 않는다.
- 비상태, 불변성 유지 : 전달받은 인자의 상태를 변경하지 않는다. 새로운 상태의 새로운 오브젝트를 만들어 반환해야 한다.
- 즉, 외부 상태나 함수로 전달된 데이터의 상태를 변경하지 않음으로서 side effect를 최소화하고 불변성을 유지할 수 있게 된다.
- 여러가지 동시다발적인 멀티쓰레드 환경에서도 안정적으로 동작가능하다.
- Expressions Only : 함수 내에서 if, switch, for, map 등을 사용하지 않는다.
- First-class와 higher-order functions 속성을 가진다.
- First-class(일급함수)? 함수를 변수에 할당하거나 함수에 인자로 전달하는 등의 일을 할 수 있다.
- Higher-order(고차함수)? 함수에서 또 다른 함수를 리턴하는 속성
- Monad..라는 어려운 개념도 있다고 한다.
( 출처 : https://www.youtube.com/watch?v=4ezXhCuT2mw )
프로토타입 기반 객체지향 프로그래밍 언어
클래스 기반의 객체지향이 아닌, 프로토타입 기반이다.
프로토타입은 부모의 "유전자"이다.
나에게 없는 속성이나 함수라면, 부모의 유전자에 물어봐서 있는지 확인할 수 있다.
다시말하면 내가 가지지 않아도 프로토타입이 가지고 있는 함수라면 실행할 수 있다.
'Web Development' 카테고리의 다른 글
callback 함수를 왜 쓰나? (0) | 2022.01.07 |
---|---|
var 변수와 스코프 (0) | 2022.01.07 |
align-content vs align-items 차이 (0) | 2021.08.23 |
[JS] 생성자 함수 장점, 객체 리터럴 단점, 유용한 Object methods (0) | 2021.08.14 |
스파르타코딩클럽 완주! 기념 회고록, 후기! | 국비지원, 웹개발 풀스택, 온라인 강의 (0) | 2021.08.13 |