본문 바로가기

: JavaScript

자바와 자바스크립트의 차이점

반응형

What is the difference between JavaScript and Java?

 


이름을 보면
자바스크립트는 마치 자바와 관련이 있는 것처럼 들리지만, 사실 구라
사실상 이것의 관계는 햄스터와 햄의 관계와 같다.
다른 예로는 인도와 인도네시아의 관계와 같다.

결론은
일도 관련이 없다는 것
(사실 하나도 관계 없는건 아니긴 함, 인도와 인도네시아도 공통점이 존재하긴 하잖아??)

나는 자바는 기존에 계속 사용했었고, 자바스크립트는 작년에 처음 사용해 봤다.

차이점에 이야기하기 앞서,

2가지의 관점으로 나눠 볼 예정이다.

1. 코딩 할 때의 차이점
2. 언어적 특성의 차이점

먼저 코딩할 때의 관점에서 얘기해보겠다.

개인적으로 큰 차이라고 느꼈던 점을 비교해보려고 한다.
가장 큰 차이점이라고 생각 든 것은 타입선언의 차이였다.

자바의 경우는 당연하게도 int, char, stirng과 같은 타입선언이 필수로 사용되어야 한다.
하지만, 자바스크립트의 경우 이게 변수라는 것을 알려주는 것이 전부다.
심지어 아래에서 같은 변수명을 선언해도 에러 발생이 하지않는다.

 

두번째 차이점으로는 
선언의 위치가 상관 없다는 점이다.
심지어 함수밖에서 선언 한 것과 지역변수로 선언한 것 구분이 없다는 점이다.
아래 코드를 보자.

var i = 6;
for (var i = 1; i < 10; ++i) {
    console.log(i);
}
console.log(i);​

 

 

기존에 C, Java 프로그래밍 언어를 배운 사람이라면,
아래 console.log(temp) 에서는
당연히
6
이 출력될 것이라 생각하겠지만,
놀랍게도
10
이 나온다.
...
...
예???


C나 Java에서는
지역변수로 사용하고 나면,
그 값은 알아서 버려지게 되고,
자연스럽게 상위 함수를 가져오는 구조이다.

하지만,
Java Script에서는
지역변수의 개념이 없다.
즉,
전부 전역변수처럼 인식하기에,
그 변수값 위치를 덮어쓴다고 생각하면 된다.

어떻게 보면, Java를 선행하여 사용하지 않았다면 이런식의 진행이 더 자연스러웠을지도 모른다는 생각도 든다.

 

세번째로는 클래스, 메소드 변수 간에 구분이 없다는 것이다.

function calc(name, type) {
  this.name = name,
  this.type = type
}
var temp = new calc('JIN91 Calculator', 'scientific'); // object

function calc(a, b) {
  return a + b;
}
var temp = calculator(1, 2); // 3

var temp = 3;

어떻게 보면 2번과 이어지는 내용이긴 하지만, 클래스와 함수의 개념이 없다는 것은 나에게 또 다른 충격이었다.

 

마지막으로는 비동기 프로그래밍이라는 점인데, 이게 진짜 골때린다. (살려줘)
이거 때문에 자바스크립트에 대한 거부감이 생길 수준 이었다....
하지만, 어느정도 적응한 후에는 이것만큼 맘에 드는게 없었다.
한단어로하면 병렬실행.
조금 더 풀자면, 코드가 내가 작성한 순서대로 실행되지 않는다는 것이다.

Morty of the 'Rick and Morty'

도대체 이게 뭔 멍소리야!?

이를 이해하기 위해선 callback 함수의 이해가 선행되어야 한다.
특히, 이 콜백함수가 고차함수가 되면, 이해하기 어렵고 복잡하며, 코드가 지저분해진다.
이를 해결하기 위한 Promise의 탄생, async/await 에 대해 이해가 받쳐줘야 하고
이를 기술하기엔 내용이 너무 길어질 것 같아 생략한다.

 

자, 그러면 왜 이런 특징들을 갖게 되었을까?
언어적 특성에 대한 차이점을 비교하면서 조금 더 알아보자.

우선 자바스크립트는 이름에서 알 수 있듯이 스크립트 언어(인터프리터 언어) 이다.
스크립트 언어는 소스 코드를 컴파일하지 않고 실행할 수 있는 프로그래밍 언어이다.
웹에서 실시간으로 번역되어 사용하도록 고안된 프로그래밍 언어이므로, 전적으로 자바와 사용하는 시점이 다르다.
자바는 이와 다르게 JVM이란 Virtual Machine이라는게 반드시 필요하며, 이를 통해서만 컴파일 및 실행이 가능하다.

그러므로, 웹에서 쉽게 테스트 할 수 있고, 언어에 대한 접근성이 높고, 자유도가 높은 언어이다.
즉, 진입 장벽이 낮아 누구나 접근할 수 있다.
그리고 
하지만 이 말은 개발자마다 각자의 스타일로 코딩하고 패러다임이나 규칙없이 코딩이 가능하다는 말이다. 
즉, 연결점이 적은 개발자 간 협업이 어렵고, 가독성이 떨어진다.

그러나 ECMAScript(이하 ES, 정보통신 표준화 기구)에 의해 표준화되고, 기능도 많이 추가 되었으며,
Node.js 이후로 수많은 패키지를 쉽게 사용할 수 있게 되며,
서버개발(front-end, back-end)에서도 많이 사용되고 있다.
그러나 이것은 결국 일정한 수준의 지식을 요구하게 된 것이다. 
즉, 현재에 와서는 또 그렇게 쉬운 언어라고만 할 수 없다는 것이다.

그리고 앞서 말한 비동기 프로그래밍의 특징으로써, 병렬처리가 가능하여 수행속도가 우수하다는 강점도 갖고 있다.

여기까지 Java와 Javascript에 대해서 알아보았다.
탄생배경와 언어의 동작방식, 그리고 특징까지 정말 하나부터 끝까지 다르기만 한 언어들을 비교해보았다.
여기까지 읽어줘서 고맙고 다음 글에서 보도록 하자!

여담으로
만약 당신이 서버개발자라면 TypeScript에 대해서 알아보고 사용하는 것을 꼭 추천하고 싶다.
다음에 글을 쓴다면 TypeScript에 대해서도 기술할 예정이다.

반응형

': JavaScript' 카테고리의 다른 글

npm ci _ vs _ npm install  (0) 2021.12.05
[JavaScript] 배열 합치는 방법과 속도 비교  (10) 2021.05.26