16-1. 자바스크립트 특징 / 스크립팅 언어 특징, 컴파일 순서, JS와 객체지향, OOP의 객체
자바스크립트 특징
- 자바스크립트는 스크립팅(Scripting) 언어
스크립팅 언어 특징
- 소스 파일의 코드를 사전에 컴파일하여 실행 파일을 만들어 놓지 않고
사용하는 시점에 컴파일하고 실행
// book.js var value = 123; var book = function () { var point = 456; var getPoint = function () { return point; } getPoint(); } book()
- 장점을 활용하는 지혜 필요
JAVA나 C++ 같은 경우는 사전에 컴파일을 합니다.
그리고 컴파일 할 때 문법 체크 등을 합니다.
그리고 확장자가 exe
인 실행 파일을 만들어 놓습니다.
그리고 실행할 땐 exe
파일을 실행합니다.
그렇기 때문에 컴파일 시간이 안듭니다.
그런데 자바스크립트는 실행하는 순간 컴파일을 합니다.
그러면 사용자 입장에선 그만큼 컴파일하는 시간을 기다려야하냐는 거죠.
이것이 스크립트 언어의 단점이라고 얘기할 수 있습니다.
10~20년 전에는 컴파일하는 시간이 부담이 됐었습니다.
그런데 상대적으로 그때는 프로그램이 짧았습니다.
제가 5~6만 라인을 작성한 경험으로 생각했을 때, 컴파일 시간은 그리 오래걸리지 않습니다.
그리고 일반적으로 3천라인 정도 선에서 애플리케이션이 돌아가거든요?
3천라인 컴파일은 컴파일도 아닙니다.
스크립팅 언어의 장점도 있습니다.
컴파일된 파일들은 코드를 수정할 수 없습니다.
그런데 스크립팅 언어는 코드를 수정해 바로 실행할 수 있습니다.
컴파일 순서
- 소스 파일의 위에서부터 아래로 컴파일
- function 키워드를 만나면 빌트인 function 오브젝트를 활용해 function 오브젝트를 생성
이때, 함수 안의 코드는 컴파일하지 않음
함수가 호출되었을 때, 위의 방법으로 컴파일
이것이 굉장히 좋은 겁니다.예시) 회원가입 버튼
보통 회원가입 버튼 누를 때만 해당 코드가 작동하면 된다.
하지만 일반적인 언어들은 실행되기도 전에 컴파일을 해놓는다.
반면, 자바스크립트는 실행될 때 컴파일을 한다.
실행되기 전엔 단순한 부담없는 텍스트일 뿐이다.이런 측면에서 본다면 컴파일하지 않는 것이 더 좋다고도 할 수 있다.
컴파일을 했다는 이야기는 기계어로 번역했다는 얘기이고, 그러면 메모리를 차지하고 있다는 소리가 된다.
이것이 스크립팅 언어의 장점이다.
JS와 객체지향
- 객체 지향 프로그래밍 언어
OOP : Object Oriented Programming 자바스크립트는 객체지향 언어
- ES5 스펙에 아래와 같이 기술되어 있음
ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects within a host environment.
ECMAScript as defined here is not intended to be
자바스크립트 OOP 구현
- 다른 언어의 OOP 구현과 차이가 있으므로 비교하는 것은 의미 없음
언어마다 이를 구현하는 방법이 다릅니다. - JS 특징이 반영된 OOP 구현
- 다른 언어의 OOP 구현과 차이가 있으므로 비교하는 것은 의미 없음
OOP의 객체
- 강좌에 필요한 것만 간략하게 다룹니다.
객체(Object)
- 개념적 접근 실체가 없다는 뜻입니다.
그런데 우리가 여태까지 봐왔던 Object는 key와 value로 이루어진 프로퍼티의 집합이었습니다.
우리가 봐왔던 것은 실체가 있었습니다.
빌트인 오브젝트 - 오브젝트라 부르고, 인스턴스도 하나의 오브젝트라고도 볼 수 있습니다.
그런데 지금 말하는 Object는 개념입니다.
그래서 지금까지 객체라는 말을 못썼습니다. - 객체는 행위(Behavior)와 속성(Attribute)으로 구성
- 행위 : 먹다, 마시다
- 속성 : 밥, 사이다
- 개념적 접근 실체가 없다는 뜻입니다.
객체를 형상화하면
- 행위가 메소드가 되고 (함수가 될 수도 있겠죠)
- 속성이 프로퍼티가 됩니다. (변수도 될 수도 있습니다.)
- 객체가 클래스로 됩니다.
클래스(Class)
- 행위와 속성을 정의한 것으로
이 상태까지는 단순 텍스트입니다. - 인스턴스로 생성하여 프로그램에서 사용
클래스는 반드시new
연산자로 인스턴스를 생성하여 프로그램에서 사용합니다.
- 행위와 속성을 정의한 것으로