자바스크립트 특성

·2024년 6월 18일
0

기타

목록 보기
1/2

오랜만에 자바스크립트 쓰려니 내가 무지무지 헷갈려서 적어보는 자바스크립트의 특성

자바스크립트 특성

자바스크립트는 프로토타입 기반의 객체 지향 언어로, 멀티 패러다임을 지원한다.

자바의 경우에는 클래스 기반의 객체지향 언어이다. 또한 정적 타입 언어로 상당히 strict하다. 타입 검사가 엄격하게 시행되므로 컴파일 시점에 오류를 발견하기가 쉽다.

반면에 이름만 비슷하고 연관은 1도 없는 자바의 유명세에 묻어가려던 자바스크립트는 앞서 설명한 특성들과 더불어 동적 타입 언어라는 특성을 가지고 있다. 언어가 유연하기 때문에 컴파일 시점에 오류를 발견하기는 힘들고 대부분 런타임에 오류가 발생하므로, 개발자가 strict 하게 개발을 해야한다.

프로토타입 기반 객체 지향

프로토타입 기반 언어의 경우 클래스를 사용하지 않고도 객체를 생성할 수 있다.
모든 객체가 다른 객체를 기반으로 생성될 수 있고, 원본 객체의 프로퍼티와 메서드를 상속받는다.
이러한 특성을 프로토타입이라고 한다.
다만 자바스크립트에서 ES6부터 클래스 기반 문법을 지원하기 때문에, 클래스를 만들어서 객체를 생성할 수도 있다. 이를 통해서 유연한 객체 지향 프로그래밍이 가능하다.

1급 객체(First-class citizen)

프로그래밍 언어에서 1급 시민이라는 것은 다음과 같은 특징들을 가지고 있음을 의미한다.

  1. 변수에 할당 가능
  2. 함수에 인자로 전달 가능
  3. 함수의 반환 값으로 전달 가능

자바스크립트의 경우 함수를 1급 시민으로 취급한다. 이는 곧 함수를 다른 변수들처럼 사용할 수 있다는 말이다. 함수가 1급 시민으로 취급되는 경우를 1급 함수라고 한다.

https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function

동적 타입

타입의 결정이 런타입에 일어난다. 변수 선언 시 strict 하게 타입을 지정하지 않는다. 그러므로 var, const, let 키워드를 사용해서 선언한다.

var의 경우 선언 전에 사용이 가능하다. 하지만 선언 전에 사용하는 경우 undefined 값을 가지게 된다. 이런 문제를 변수 호이스팅 문제라고 한다.

ES6에서는 변수 호이스팅 문제를 막고, 가독성을 높이기 위해서 const, let의 사용을 권장한다. const, let은 선언 전에 사용할 경우 오류가 발생한다.

비동기 작업

자바스크립트는 싱글 쓰레드 언어로 절차적 특성을 지니고 있다. 작성된 코드가 순차적, 동기적으로 실행됨을 의미한다. 싱글 쓰레드를 사용하는 경우에는 동시성 문제에 대해서 신경쓰지 않아도 된다.

하지만 싱글 쓰레드에서 이전 명령이 끝날 때까지 다음 명령을 처리하지 못하는 것은 자원의 낭비를 초래할 수 있다.

싱글 쓰레드의 단점을 타파할 수 있는 것이 비동기 작업이다. 비동기 작업은 다른 명령들과 다르게 순차적으로 처리하지 않아도 된다.

자바스크립트는 콜스택, 이벤트 루프, 태스크 큐를 사용해서 명령들을 처리한다.

먼저 처리를 해야하는 명령이 순차적으로 콜스택에 쌓인다. 그리고 콜스택에 쌓은 명령들은 실행이 완료된 후 콜스택에서 제거된다.

비동기 작업은 앞서 말했듯이 순차적으로 처리하지 않아도 된다. 이를 처리해주는 것이 바로 이벤트 루프와 태스크 큐이다. 동기적으로 수행되는 명령들이 콜스택에서 처리되는 동안, 비동기 작업을 위한 콜백함수는 태스크 큐에서 대기한다.

콜스택의 모든 동기 작업들이 수행되고 콜스택이 완전히 비워지면, 이벤트 루프가 실행된다. 이벤트 루프는 태스크 큐에서 대기하던 콜백함수를 콜스택에 올린다. 콜스택에 올려진 콜백 함수는 실행 후 콜스택에서 제거된다.

모든 동기, 비동기 작업이 수행된 후에 콜스택과 태스크 큐는 모두 비워진다.

profile
티스토리로 블로그 이전합니다. 최신 글들은 suhsein.tistory.com 에서 확인 가능합니다.

0개의 댓글