오늘부터는 JavaScript 강의를 듣게 되었다.
공부를 어떻게 시작하면 좋을까 하다가,
학습 목표에 맞추어 강의 내용 정리를 해보면 좋을 것 같다는 생각이 들었다.
다만, 글이 과도하게 길어지면 가독성 면에서 좋지 않기 때문에
오늘부터는 글을 여러 개로 나누어 학습목표 항목별로 분류하겠다.
글이 잘리지 않도록 하나를 시작하면 다 쓸 때까지 끝내지 않겠으니 걱정하지 마시라.
원래 이름은 LiveScript였으나,
당시 Java가 유명했기 때문에 이름을 JavaScript로 바꾸었다고 한다.
흔히 Java와 JavaScript의 관련성을 인도와 인도네시아의 관련성으로 비유하곤 하는데, 실로 적절하다.
나 또한 잘 모를 때는 적어도 Java를 만든 회사에서 만든 Java 비슷한 것이 아닐까 생각했다.
이런 고유명사를 이런 식으로 활용하다니. 믿을 수가 없어서 더 검색해 보니 상표권 허락은 받았다고 하는데, 이건 Java 쪽이 상당히 관대한 것이 아닌가 하는 생각이 든다.
브라우저 환경에서 동적인 Action을 제어하기 위해 만들어졌다.
다만 JavaScript가 원래 이만큼 편리했던 것은 아닌데, 큰 혁신이 일어난 역사적 순간들은 다음과 같다.
2005년, AJAX의 등장
변화가 있으면 무조건 페이지 전체를 새로고침해야 한다는 단점 개선,
버튼을 누르면 그 영역만 새로고침이 가능
UX(User Experience)의 폭발적 향상
2008년, V8 엔진 크롬에 탑재
엄청난 속도 향상
2009년, Node.js 등장
브라우저 외 어디에서도 사용이 가능
FrontEnd + BackEnd + DB 모두 가능한 FullStack 언어
현 시점에서 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를 서버 측에서도 활용할 수 있다.