자바스크립트의 특징
JavaScript란 어떤 특징과, 어떠한 장단점을 가지고 있는지 한번 생각해보자.
이번 장에서는 JavaScript가 웹 상에서 어떻게 사용되고 있는지에 대한 Web 구성 요소일 때의 JavaScript와,
하나의 프로그래밍 언어로써의 JavaScript에 대해 나눠서 알아보고자 한다.
JavaScript 와 Java ?
프로그래밍에 관심이 있는 사람이라면, Java라는 언어에 대해서 들어봤을 것이다.
대표적인 객체 지향 프로그래밍 언어로, 가장 많이 쓰이는 언어 중에 하나이다.
그럼 JavaScript에는 왜 Java가 들어갔을까? 혹시 Java로부터 나온 언어인 것일까 ? 하는 의문점이 든다.
결론부터 말하자면, '아니다'.
인도와 인도네시아가 다르듯이 , Java는 자바 가상 머신(JVM) 상에서 구현되는 언어이고, 브라우저 내부의 인터프리터를 통해 구현되는 JavaScript는 실행 방식부터 다른 언어이다.
단지 JavaScript가 개발되어 세계에 이름을 알리려고 했을 때에, (그 당시의 이름은 LiveScript였다고 한다.) 세계적으로 Java가 굉장히 큰 호응을 얻고 있었고, 그 호응에 탑승하고자 이름에 Java를 넣었을 뿐이라고 한다.
재밌는 이야기이다.
하여튼, JavaScript는 Java로부터 나온 언어가 아니라, 별개의 언어이며 충분히 다양한 강점들을 가지고 있는 언어이다.
JavaScript는, 인터프리터 언어이다.
먼저 컴파일러와, 인터프리터의 차이를 알아보자.
프로그래밍 언어는 각자의 언어에 맞게 실행되는 환경이 필요하다. 이 때에, 프로그래밍 언어를 기계가 이해할 수 있는 언어로 바뀌어 실행 파일로 바꾸는 과정을 컴파일이라고 한다.
C 프로그래밍을 하게 된다면, 컴파일러를 통하여 C 언어를 실행 파일로 컴파일하고, 그 실행 파일을 실행하는 방식이 사용되게 된다.
반면에 컴파일이 필요 없이, 바로 언어를 한 줄씩 읽어서 실행하는 방식이 있는데, 이를 인터프리터 방식이라고 한다.
웹 브라우저에서 JavaScript 실행이 가능한 것은, 브라우저 내부에 인터프리터가 내장되어 있기 때문이라고 할 수 있다.
컴파일 언어와 비교하자면 컴파일 과정이 필요 없기 때문에 실행에 이르는 시간이 단축되지만,
언어가 그대로 노출된다는 단점 또한 존재한다.
JavaScript는 객체 지향 언어이다.
객체 지향이라는 단어를 처음 보는 사람들을 위해 설명하자면, 프로그래밍 언어는 크게 절차 지향과 객체 지향으로 나뉜다.
기계가 이해하기 위한 언어는 절차 지향의 성격이 강하다. 기계는 언어를 순서대로 인식할 뿐이다.
그러나 이러한 방식은 현실적인 부분들을 표현하는 것에 불편함이 있었고, 그래서 객체 지향 언어가 탄생하게 된다.
예를 들어, '양디' 라는 사람을 생각해보자.
이 '양디'는 다양한 특징을 가지고 있고, 다양한 행동을 할 수 있는 '객체'이다.
단순히 '양디'의 행동과 특징을 순서대로 나열하는 것에 그치는 것이 아니라, 이 '객체'가 지닌 특징과 행동을 결합하여 '객체'를 설명하고, 이 '객체'를 중심으로 프로그램이 실행되는 것이다.
즉, 가장 중요한 것은 객체의 특징(Property) 와 행동(Method) 들이 서로 유기적으로 결합하여 실행된다는 것이다.
객체 지향 프로그래밍에는 캡슐화, 상속성, 다형성의 특징을 지니는데, 이는 나중에 따로 포스팅하도록 하자.
어찌 되었든, JavaScript는 객체 지향 언어이며, 모든 함수, 변수 등의 구성 요소들은 Object 로써 작동한다.
JavaScript의 함수는 일급 객체(First Class Object)이다.
일급 객체라는 것은, 다음과 같은 조건을 포함한다.(ECMAScript Specification 참조)
변수에 저장할 수 있어야 한다.
함수의 파라미터로 전달할 수 있어야 한다.
반환값으로 사용할 수 있어야 한다.
자료구조에 저장할 수 있어야 한다.
이와 같은 특징을 지닌 것은 아주 강력한 강점을 의미한다.
이런 특징으로 과거의 자바스크립트 개발자는 다형성, 상속성, 캡슐화 기능이 가능한 객체들을 개발하였다.
(이제는 공식적으로 지원을 해준다.)
함수와 변수 들에 대해 모르는 사람이 있을 수 있으므로, 나중에 다시 설명하기로 하자.
JavaScript의 장점
위와 같은 특징들이 JavaScript의 장점이 될 수 있다.
첫째로, 인터프리터 언어로 컴파일 과정이 없이 빠르게 실행이 될 수 있다.
둘째로, 일급 객체 언어로 개발자가 능력이 된다면 함수를 통하여 무한대에 가까운 가능성의 언어를 개발할 수 있다.
셋째로, 웹 브라우저 상에 스크립트 엔진이 내장되어 있으므로, 시스템 환경 등 플랫폼에 구애 받지 않고 개발한 후에 브라우저 상에서 사용이 가능하다.
JavaScript의 단점
첫째로, 컴파일 되지 않은 언어가 그대로 사용자에게 주어지므로, 소스 노출의 위험이 크다.
둘째로, 브라우저 상에서 소스를 변경하여 사용자가 임의로 기능을 실행할 수 있다는 위험이 있다.
이러한 단점은, 과거에 웹 게임을 만들 때에 고민을 했었는데, 클라이언트 부분에서 연산을 수행하는 다른 게임들과 비교하여서
객체들이 사용자에게 고스란히 공개되는 단점으로, 연산을 사용자가 임의로 수정하여 게임에 악영향을 끼칠 수 있다는 점이었다.
따라서, 서버 측과 클라이언트 측의 적절한 소스 분배가 필요해진다.
이런 단점에도 불구하고, JavaScript는 아주 강력하고, 편리하고, 유용한 개발 언어이다.