Javascript

[Javascript] 자바스크립트란 어떤 언어인가?

코딩 1.5 2024. 2. 5. 13:44

자바스크립트란?

자바스크립트로 한 줄로 간략하게 정의하면 아래와 같다.

Javascript is a high-level, object-oriented, multi-paradigm programming language.

 

상기의 정의는 100% 맞는 말이지만 빙산의 일각에 불과하다. 조금 더 자세하게 정의하자면 아래와 같다.

Javascript is a high-level, prototype-based, object-oriented, multi-paradigm, interpreted or just-in-time compiled, dynamic, single-threaded, garbage-collected programming language with first-class functions and a non-blocking event loop concurrency model.

 

자바스크립트에는 굉장히 많은 개념들이 있음을 알 수 있다. 각각의 의미를 해석해보자.

 

High-level

어떤 컴퓨터 프로그램이든 메모리나 CPU 같은 자원을 필요로 한다. Low-level 언어인 C언어에는 이러한 자원을 개발자가 수동으로 관리해야한다. 반면, 자바스크립트나 파이썬의 경우 자원(리소스)를 관리할 필요가 없다. 다만 C언어와 같이 메모리를 최적화를 시킬 수 없어 속도가 빠르지 않다는 단점이 있다. 이러한 자바스크립트에서 메모리 관리를 해주는 도구가 바로 Garbage Collection이다. 

 

 

Garbage-Collected

기본적으로 JavaScript 엔진 내부의 알고리즘으로 컴퓨터 메모리에서 사용되지 않는 오래된 객체를 자동으로 제거한다. 즉, 자바스크립트에는 메모리를 청소하는 청소부가 있기에 코드에서 수동으로 관리할 필요가 없는 것이다.

 

 

Interpreted or just-in-time-compiled

컴퓨터 프로세서는 오직 0과 1만을 이해하기 때문에 궁극적으로 모든 프로그램은 기계코드인 0과 1로 작성되어야 한다. 하지만 이러한 방식은 비효율적이기 때문에 인간이 이해할 수 있는 언어인 자바스크립트 코드를 컴퓨터 코드로 추상화하여 0과 1로 바꾸는 것이다. 이 과정을 컴파일링이라고 한다. 컴파일링은 모든 프로그래밍 언어에서 필수이다. 기계어를 직접 작성하지 않기 때문이다. 자바스크립트에서의 컴파일링은 자바스크립트 엔진 내에서 발생한다.

 

 

Multi-paradigm

자바스크립트 언어가 인기있는  이유 중 하나는 Multi-paradigm 언어이기 때문이다. 프로그래밍에서 패러다임이란 코드를 구성하는 접근 방식과 전반적인 사고방식을 의미한다. 인기있는 패러다임은 절차적, 객체 지향적, 기능적 프로그래밍이며 자바스크립트는 3가지를 모두 구현할 수 있다. 한 마디로 유연하고 다재다능하다.

 

 

 

절차 지향적 : 절차적 프로그래밍은 기본적으로 코드를 선형적으로 구성하고 그 사이에 기능들을 넣는 방식이다. 

객체 지향적 : 자바스크립트는 프로토타입 기반의 객체 지향적인 접근방식이다. 숫자나 문자열 같은 원시적인 타입을 제외하고 자바스크립트에 있는 거의 모든 것은 객체이다. 하지만 배열은 그냥 객체이다. 배열을 만들고 아래와 같이 push 메소드를 사용할 수 있는 이유가 무엇일까? 바로 프로토타입 때문이다.

 

기본적으로 배열은 템플릿과 비슷한 개념인 배열 청사진으로부터 만든다. 이러한 개념을 프로토타입이라고 부른다. 배열은 이 프로토타입으로부터 메소드를 상속 받아서 사용할 수 있다.

 

First-class functions

First-class functions은 함수를 정규 변수로 다룬다는 의미이다. 자바스크립트에서는 함수를 다른 함수로 전달할 수 있고, 함수에서 함수를 반환할 수 있다. 이는 아주 강력한 기능이다. 강력한 기술도 많이 적용할 수 있고 기능성 프로그래밍도 가능해진다. 예를 들어, 아래의 이미지와 같이 closeModal 함수를 마치 일반 변수인 것 처럼 addEventListener 함수에 전달한다. 모든 언어가 First-class functions 기능을 가지고 있지 않지만 자바스크립트는 가지고 있다.

 

 

 

Dynamic

Dynamic(동적)이란 동적(dynamic) 형식(typed)을 의미한다. 자바스크립트에서는 변수에 데이터 유형을 할당하지 않는다. 자바스크립트 엔진이 코드를 실행할 때 타입을 판단한다. 다른 프로그래밍 언어에서는 변수에 수동으로 타입을 할당한다. 그 결과 일반적으로 버그가 발생하는 것을 막는다. 그래서 많은 사람들이 자바스크립트도 타입스크립트와 같은 정적 타이핑의 언어로 사용한다.

 

 

Non-blocking event loop

동시성(concurrency) 모델(model)이란 자바스크립트 엔진이 동시에 발생하는 여러 작업을 어떻게 처리하는지를 의미한다. 자바스크립트 자체가 싱글(single) 스레드(thread)로 실행되기 때문에 한 번에 한 가지만 수행할 수 있다. 따라서 동시에 여러가지 작업을 처리하는 방법이 필요한 것이다. 컴퓨팅에서 스레드(thread)는 컴퓨터 CPU에서 실행되는 명령어 세트와 비슷하다. 즉, 스레드는 컴퓨터의 프로세서에서 코드가 실행되는 곳이다. 따라서, 싱글 스레드인 자바스크립트에서 시간이 많이 걸리는 큰 작업을 수행하고 있다면 뒤의 작업은 멈추게 된다. 이에 Event Loop를 통한 non-blocking behavior가 필요한 것이다. 다시 말해, 자바스크립트는 single thread이면서 non-blocking event loop concurrency model의 언어인 것이다.

 

 

Event loop에 대한 자세한 내용은 아래의 링크에서 확인할 수 있다.

https://codesmoothie.tistory.com/9

 

[JavaScript] 비동기 코드의 동작 원리 - 이벤트 루프(The Event Loop)

앞서 AJAX와 API 무엇인지 학습했고, 비동기 코드와 Promise에 대해서 배웠다. 이번 포스팅에서는 자바스크립트 이면에서 해당 코드들이 어떻게 동작하는지 이해해보자. Javascript 런타임 Javascript 런

codesmoothie.tistory.com