사고쳤어요
JavaScript의 특징 본문
인터프리터 언어
컴퓨터를 사용하면 우리는 원하는 정보를 얻을 수 있고, 원하는 작업을 쉽게 처리할 수 있다.
그런데, 컴퓨터는 우리 인간이 사용하고 보는 언어, 코드를 사용하지 않으며 기계어를 사용한다.
따라서 인간이 작성한 코드를 컴퓨터가 실행하기 위해서는 코드를 변환하는 작업이 필수적이다.
이 때 작성한 코드가 어떤 종류냐에 따라 그 과정이 달라진다.
- 컴파일러 언어
컴파일러 언어는 사람이 코드를 작성하면 작성된 코드가 기계어로 변환되고, 기계에서 실행된다.
- 인터프리터 언어
인터프리터 언어는 사람이 코드를 작성하면 기계어로 변환하는 과정을 거치지 않고,
기계에서 바로 실행하고 코드가 변환되며 실행된다.
인터프리터 언어는 컴파일 단계가 없고 컴파일러 언어는 컴파일을 해줘야 한다는 번거로움이 있지만
인터프리터 언어는 실행하면서 변환을 해주어야 하므로 실행 속도가 더 느리다.
실제로 인터프리터 언어인 JavaScript와 컴파일러 언어인 Rust의 실행 속도를 비교해 보면,
Rust는 컴파일 단계를 거치는 것을 볼 수 있고 실행 속도도 더 빠르다는 것을 알 수 있다.
동적 타입 언어
JavaScript는 변수에 들어가는 값에 따라서 런타임에 타입이 추론된다.
변수를 정의할 때는 number, string 등의 타입을 정하지 않고 let, var과 같이 정의를 해준다.
let a = 1;
let b = "1";
console.log(typeof a);
console.log(typeof b);
// output
// typeof a is number
// typeof b is string
일급 객체
JavaScript에서 함수는 객체와 동일하게 사용할 수 있다.
즉 함수를 변수에 할당할 수 있고, 다른 함수를 함수의 인자로 전달받을 수 있고, 다른 함수의 결과로서 리턴될 수 있다.
// 변수에 할당
const fun1 = function (num) {
return num + 1;
};
// 다른 함수를 함수의 인자로 전달
const fun2 = function (num) {
return num + 2;
};
const fun3 = function (fun, num) {
return fun(num);
};
const result1 = fun3(fun2, 3); // 5
// 다른 함수의 결과로서 리턴
const fun4 = function (num1) {
return function (num2) {
return num1 + num2;
};
};
const result2 = fun4(5)(6); // 11
프로토타입 상속
JavaScript는 Class라는 개념이 존재하지 않고 프로토타입을 통해 상속을 구현한다.
(ES6에서 Class 문법이 추가되어 사용이 가능하다)
function person(name) {
this.name = name;
}
person.prototype.sayHello = function () {
console.log(`Hello My name is ${this.name}`);
};
const me = new person("김민제");
console.log(me); // person { name: '김민제' }
여러 프로그래밍 패러다임 지원
JavaScript는 다음 프로그래밍 패러다임을 지원한다.
- 명령형 프로그래밍
- 함수형 프로그래밍
- 객체지향 프로그래밍
'JavaScript' 카테고리의 다른 글
JavaScript 객체 (0) | 2025.04.01 |
---|---|
JavaScript 제어 흐름(Flow Control) (0) | 2025.03.27 |
JavaScript 연산자 (0) | 2025.03.27 |
JavaScript 타입 (0) | 2025.03.26 |
JavaScript 변수 (0) | 2025.03.26 |