내일배움캠프 6일차 TIL(1) - JavaScript의 역사와 특징

Sunny·2023년 12월 29일
0
post-thumbnail

오늘부터는 JavaScript 강의를 듣게 되었다.

공부를 어떻게 시작하면 좋을까 하다가,
학습 목표에 맞추어 강의 내용 정리를 해보면 좋을 것 같다는 생각이 들었다.

다만, 글이 과도하게 길어지면 가독성 면에서 좋지 않기 때문에
오늘부터는 글을 여러 개로 나누어 학습목표 항목별로 분류하겠다.
글이 잘리지 않도록 하나를 시작하면 다 쓸 때까지 끝내지 않겠으니 걱정하지 마시라.

JavaScript의 역사

JavaScript가 된 이유

원래 이름은 LiveScript였으나,
당시 Java가 유명했기 때문에 이름을 JavaScript로 바꾸었다고 한다.

흔히 Java와 JavaScript의 관련성을 인도와 인도네시아의 관련성으로 비유하곤 하는데, 실로 적절하다.
나 또한 잘 모를 때는 적어도 Java를 만든 회사에서 만든 Java 비슷한 것이 아닐까 생각했다.
이런 고유명사를 이런 식으로 활용하다니. 믿을 수가 없어서 더 검색해 보니 상표권 허락은 받았다고 하는데, 이건 Java 쪽이 상당히 관대한 것이 아닌가 하는 생각이 든다.

JavaScript의 발전

브라우저 환경에서 동적인 Action을 제어하기 위해 만들어졌다.
다만 JavaScript가 원래 이만큼 편리했던 것은 아닌데, 큰 혁신이 일어난 역사적 순간들은 다음과 같다.

2005년, AJAX의 등장
변화가 있으면 무조건 페이지 전체를 새로고침해야 한다는 단점 개선,
버튼을 누르면 그 영역만 새로고침이 가능
UX(User Experience)의 폭발적 향상

2008년, V8 엔진 크롬에 탑재
엄청난 속도 향상

2009년, Node.js 등장
브라우저 외 어디에서도 사용이 가능
FrontEnd + BackEnd + DB 모두 가능한 FullStack 언어

현 시점에서 JavaScript를 따라올 수 있는 프로그램 언어는 없다.고 한다.

JavaScript의 특징

객체 지향 프로그래밍 지원

절차 지향: 차례대로 실행
객체 지향: 객체 단위로 묶어서 실행

강의에서 이러한 설명을 듣고,
객체 지향이라는 말도 바로 확 와닿는 표현은 아니지만 그동안 접한 적이 있는 언어는 전부 객체 지향 언어였기 때문에 오히려 절자 치향은 어떻게 다른 것인지가 감이 잘 오지 않았다.
'객체 지향이 아니고서는 어떻게 사용하지?'라는 의문이 들었던 것이다.
검색해보니 절차적 언어의 예시로 C가 있었는데, C는 배워 보지는 않았어도 굉장히 유명한 언어가 아닌가!

절차 지향이 순서대로만 실행하는 것이고 객체 지향이 그 반대 개념이라면, 객체 지향적이기 때문에 함수도 변수도 다시 불러와서 사용할 수 있다는 것인데 이 말대로라면 도대체 어떻게 코딩이 이루어지는 건지 궁금했다.

그래서, C언어의 구조를 살짝 보러 갔는데...
https://en.cppreference.com/w/c/language/main_function

int main(int argc, char *argv[])
{
    printf("argc = %d\n", argc);
    for (int ndx = 0; ndx != argc; ++ndx)
        printf("argv[%d] --> %s\n", ndx, argv[ndx]);
    printf("argv[argc] = %p\n", (void*)argv[argc]);
}

처음부터 main() 이라는 함수가 있었기 때문에 굉장히 놀랐다.
그렇다면 함수는 존재한다는 것인데... 여기서부터 머리가 빙빙 돌면서 호기심 센서가 발동했다.

혹시 여기까지 같은 의문을 가진 사람이 있다면

이후 탐색을 통해 어느 정도의 해답을 얻기는 했으나 일단 이 글은 절차와 객체에 대한 글은 아니고 지금 딱 정의를 내리기에는 앎이 미흡하기에, 이해에 가장 많은 도움을 준 글을 소개한다.

https://st-lab.tistory.com/151

간결하게 말하자면 함수보다 'class'를 생각해야 이해가 쉬운 것 같다.
각각의 예시에서 코드를 수정하고자 할 때 어떻게 해야 할지에 대해 생각해보면 감이 좀 잡힌다.

이 문제에 대해서는 정갈한 형태로 의견을 정리해보고 싶기는 한데 이러다가는 하루종일 1강도 못 끝낼 것이 분명하기 때문에 더 좋은 설명이 가능해지면 나중에 수정하도록 하겠다.
(오해 방지: 이 탐구는 대부분 점심시간을 깎아서 진행했다.)

자, 이제 다시 JavaScript의 특징으로 돌아가자.

동적 타이핑

JavaScript 구문을 처음 접했을 때 굉장히 편리하다고 생각한 부분이다.
정적 언어들은 변수를 만들 때 이런 식으로 데이터 타입을 지정해주어야 한다.

string a = '안녕하세요';
int b = 1;
float c = 3.14f;

하지만 Python이나 JavaScript는 변수를 생성하고 데이터를 넣으면 알아서 타입을 지정한다.
Python을 예시로 하면 다음과 같다.

a = '1'
b = 1
c = 1.0

이런 식으로 변수를 만든 후 각각의 타입을 확인하면 이렇게 출력된다.

<class 'str'>
<class 'int'>
<class 'float'>

전자의 경우 코드를 작성한 순간 타입은 결정되어 있는 것이고,
후자의 경우 코드가 실행되면서 타입이 부여되는 것이다.

자료에 쓰인 대로 선언과 할당에 대해 설명하자면

string a;

a가 선언되었다. 그리고 미리 문자열만 받겠다고 못을 박았다.
여기에 다른 자료형을 넣으려고 하면 오류가 발생한다.

let a;

a가 선언되었다. 하지만 무엇이 들어갈지는 정해져 있지 않다.
여기에 할당되는 자료형에 따라 a의 자료형도 달라진다.

그리고 JavaScript의 경우 후자를 채용하고 있다.

함수형 프로그래밍 지원

함수를 지원한다.

비동기 처리

이 글에 정리하겠다.

클라이언트 측 및 서버 측 모두에서 사용 가능

Node.js 덕에 JavaScript를 서버 측에서도 활용할 수 있다.

0개의 댓글