-
자바스크립트의 특징 (OOP, 스크립트 언어)JavaScript 2020. 10. 20. 22:52
스크립트 언어의 특징
자바스크립트는 ECMA스크립트라고도 불리며 아래와 같다.
ECMA스크립트(ECMAScript, 또는 ES[1])란, Ecma International이 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 말한다. 따라서 ECMA스크립트란 스크립트 언어를 표준화 시키기 위해 만든 명세이다. 따라서 JS는 ECMA스크립트가 가지는 기술 규격에 따라 정의된 표준화된 프로그래밍 언어이다.
스크립트 언어는 C, JAVA 와 같은 컴파일 언어와는 다르게 컴파일 과정을 프로그램을 실행하는 동시에 수행한다. 즉 HTML 문서안에 src 속성에 JS 파일을 작성해두면 HTML 파일이 랜더링 되면서 JS 파일을 찾아 실행 하게 되고, 실행 하게 되는 순간 컴퓨터가 읽을 수 있는 바이너리 코드 형태로 번역되어 메모리에 올라가게 된다.
위와 같이 스크립트 언어는 프로그램을 실행하는 순간 작성한 Script 코드를 바이너리 코드로 변환하여 메모리에 적재하며 이때 변환하는 과정은 다음과 같다.
- JS 파일에 있는 Script 코드를 위에서 아래로 읽으면서 바이너리 코드로 변환한다.
- 코드에 function 키워드가 존재한다면 Function 오브젝트를 생성한다.
- function 키워드 안에 작성 된 함수 코드는 컴파일 하지 않으며 오직 오브젝트만 생성한다.
- 컴파일 중 작성한 function (오브젝트) 을 호출 할 경우 해당 function 오브젝트가 정의 되어 있는 코드로 돌아가 해당 오브젝트 안에 있는 코드를 컴파일 한다.
자바스크립트와 OOP (객체 지향 프로그래밍)
객체 지향 프로그래밍은 일종의 추상적인 개념으로 프로그래밍에서 사용하는 요소를 속성과 행위로 나누어 더욱 효율적으로 프로그램이 동작할 수 있도록 도와주는 개념이다.
예를 들자면 강아지와 같은 추상적인 개념이 객체이며, 강아지라는 추상적인 개념이 포함하고 있는 행동 및 정보
+ 행동
- 짖다, 깨물다, 네발로 걷는다
+ 정보
- 머리, 몸통, 다리, 꼬리, 발톱, 이빨
위와 같은 강아지가 가지는 요소를 강아지라는 객체에 저장하여 관리하는 방법을 객체 지향 프로그래밍이라고 한다.
객체 지향이라는 추상적인 개념을 프로그래밍에 대입하여 형상화 하면 다음과 같다.
// 강아지 객체 var Dog = new Function; // 강아지 속성 Dog.prototype.head = 0; Dog.prototype.body = 0; Dog.prototype.tail = 0; // 강아지 행동 Dog.prototype.bark = function(){ console.log("월월!!"); } Dog.prototype.bite = function(){ console.log("아그작!!"); } // 강아지 객체의 실체화 된 리트리버라는 강아지 종류 생성 // 골든 리트리버 var goldDog = new Dog; // 골든 리트리버 머리길이 10cm goldDog.head = 10; // 골든 리트리버 몸통길이 50cm goldDog.body = 50; // 골든 리트리버 꼬리길이 5cm goldDog.tail = 5; // 골든 리트리버의 짖는 행위 console.log(goldDog.bark());
위와 같이 개발자가 작성한 객체 (Dog) 에 강아지가 가지는 속성 (머리, 몸통, 꼬리), 행동 (짖다, 깨물다) 와 같은 요소들을 같이 정의하며, 나중에 강아지라는 객체를 사용할 때가 있을 때 더욱 효율적으로 사용할 수 있다.
예를들어 강아지라는 종(객체) 에 포함 되는 실체화 된 대상인 리트리버 (인스턴스) 를 생성한다면 이미 기존에 강아지라는 객체를 만들어 놓았기 때문에 사용자는 강아지라는 객체의 인스턴스를 생성하여 리트리버가 가지는 추가적인 특징만 추가, 수정하여 사용하면 된다.
자바스크립트에서는 객체의 개념을 Class 라는 것으로 형상화 시키며 행동은 매소드, 속성은 프로퍼티, 변수 와 같은 요소들로 형상화 된다고 볼 수 있다. 추가적으로 자바스크립트에서는 객체가 가지고 있는 모든 요소를 prototype 이라는 object에 정의한다. 따라서 정의한 객체의 형상화 된 대상 (인스턴스) 을 생성 할 경우 객체내부에 prototype이라는 object를 참조하게 된다.
+ prototype은 빌트인 Object 객체의 인스턴스이다.
위와 같이 class 문법을 통해 객체를 생성하는 것은 내부적으로 자바스크립트 엔진에서는 Dog 이라는 객체를 생성한다. 즉 (constructor, prototype)와 같이 생성자 함수와 프로토타입 객체 (Object object) 를 생성하며 이때 프로토타입 객체에 객체를 생성할 때 작성한 요소 (행동, 속성)들이 연결된다.
따라서 class는 함수와 같으며 class 함수가 하는 역할은 생성자 함수와, 프로토타입 객체의 생성 그리고 객체에서 정의한 요소들을 프로토타입 객체에 연결 시켜주는 역할을 한다.
'JavaScript' 카테고리의 다른 글
getter, setter 함수 (0) 2020.10.21 Built - in Object 함수 (0) 2020.10.21 Array 객체 join(), includes() 매소드 활용 (0) 2020.10.15 Array 객체 매소드 정리 (ES5) (0) 2020.10.14 Array Property List (prototype) (0) 2020.10.13