세상에서 가장 잘 못 이해 되고 있는 언어라는 것이 있습니다. 바로 자바스크립트 javascript 라는 놈이랍니다. 방문자의 주의를 끌기 위해 깜빡이는 글자, 흘러가는 글자, 마우스를 올렸을 때 사진을 바꿔주는 기능, 소스 보기를 못하게 마우스 오른쪽 클릭을 막는 일, 약간은 불법적인 용도로 다른 페이지로 납치하는 일 등등.

정적이었던 HTML 페이지에 생동감을 불어 넣어 주었던, 어쩌면 귀여운, 어쩌면 조잡한 일을 담당했던 언어가 바로 자바스크립트 라는 놈이었다라고 기억 하실 겁니다. 

다른 사이트의 괜찮은 기능을 소스보기를 통해 복사해 붙여넣어 사용함으로써 근본없이 꼬여버리는 언어라고 인식되어 졌고, 점점 사양길로 접어 드는 듯했습니다. 자바스크립트를 살리는 역사적인 일이 벌어졌으니, Fat 클라이언트, UX, Ajax를 이용한 부분 업데이트 개념들의 부상(결정적으로 구글맵스와 야후의 YUI )과, 더 이상은 스파게티라고 부르지 말아줘라며 자바스크립트 프레임워크 Prototype Framework, jQuery Framework 라는 것의 등장이었습니다.


웹개발자들은 자바스크립트를 다시 보기 시작했고, 제대로 공부할 필요가 생겼습니다. 뭘 공부해야 할 까요. 언어의 스펙은 당연 기본일 것 입니다. 또 알아야 할 것이 있다면 자바 스크립트가 프로토타입-베이스드 언어 Prototype-Based Language 라는  약간은 생소한 언어 라는 것 입니다. 
 
그래서 모질라 개발자 센터의 Core JavaScript 1.5 Guide: class-Based vs. Prototype-Based Language 라는 문서를 번역 합니다.


class-Based vs. Prototype-Based Language




Core JavaScript 1.5 Guide: class-Based vs. Prototype-Based Language

클래스-베이스 vs 원형 베이스 언어
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Class-Based_vs._Prototype-Based_Languages 

원본 : 모질라 개발 센터 : 번역

Core JavaScript 1.5 Guide: class-Based vs. Prototype-Based Language

Contents

1. class-Based vs. Prototype-Based Languages
 1.1 Defining a Class
 1.2 Subclasses and Inheritance
 1.3 Adding and Removing Properties
 1.4 Summary of Differences

class-Based vs. Prototype-Based Languages
(클래스 기반 vs 원형 기반 언어)

Java와 C++와 같은 Class-Based object-oriented language는  Classe 와 Instance로 대표되는 두개 구별되는 개념에 가진다.

-Class는 그를 성격화 하는 object의 집합으로 속성을 정의한다.(Java에서의 method 와 field 또는 C++에서 Property가 되는 멤버). 

하나의 Class는  object 집합의 특정 멤버를 묘사하기보다는 사물을 추상화한다.
예를 들어,  Employee class는 모든 Employee의 집합을 표현 할 수 있다.


-Instance ( 다른말로 class의 실체화) 는 그 멤버들중 하나이다. 예를 들어 Victoria는 Employee로 특정 개개인을 표현하는 Employee클래스의 하나의 Instance가 될수 있다.
 하나의 인스턴스는 정확하게 그 부모의 속성을 가진다(더 많지도, 더 적지도 않게)


Javascript와 같은 Prototype-Based language는 이 구별을 가지지 않는다. 단순하게 object를 가진다. Prototype-Based language는 Object의 원형이란 개념을 가진다. Object는 새로운 Object의 속성들을 초기화하기 위한 템플릿으로서 사용된다.
모든  Object는 생성시 와 Runtime 시를 막론하고 Object의 모든 속성들을  지정할 수 있다.  덧붙여, 모든 object는 첫번째 Object의 속성들을 공유하는 두번째 Object를 허용하는 또다른 object를 위한 원형으로 구성될수 있다.



클래스 정의하기 Defining a Class

Class-Based language에서는 분리된 Class 정의로 정의한다. Class 정의에서 여러분은 클래스의 인스턴스를 만드는 Constructor라고 하는 생성자를 호출하는 특정한 메소드를 지정할 수 있다. 생성자 메소드는 생성시에 특정한 값을 초기화하고 적절한 작업을 수행할 수 있다. 여러분은 생성자로 구성된 클래스를 인스턴스화하기 위해 new 연산자를 사용할 수 있다.

Javascript도 비슷한 모델을 따른다, 하지만 클래스 정의로부터 분리된 생성자를 가지지는 않는다. 대신 여러분은 특정한 값과 속성으로 초기화된 오브젝트를 생성할 수 있는 생성자 함수를 정의할 수 있다. 어떤 Javascript 함수도 생성자가 될 수 있다. 새로운 오브젝트를 생성하기 위해 생성자를 이용한 new 연산자를 사용할 수 있다.

하위클래스와 상속 Subclasses and Inheritance
class-based language에서 클래스 정의를 통하여 클래스의 구조를 만들 수 있다. 클래스 정의에서 , 당신은 새로운 클래스가 이미 존재하는 클래스의 하위 클래스로 정의할 수 있다. subclass는 superclass의 모든 속성을 상속 받는다. 덧붙여 새로운 속성과 상속받은 속성을 수정할수 잇다. 예를 들어 Employee 클래스가 name과 dept라는 property를 가지고 있다고 가정하자. 이런 경우에 Manager 클래스의 Instance는 세개의 속성들을 가질 것이다. name, dept, and reports

Javascript는 생성자 함수의 원형 구성으로 상속을 구현한다. 그래서 , 여러분은 정확히 Employee-Manager 예제를 생성할 수 있다. 하지만 약간 다른 서술법을 사용한다. 첫째로 Employee 생성자 함수를  정의한다. name과 dept의 속성을 지정한다. 다음으로 Manager 생성자 함수를 정의한다. reports 속성을 지정한다. 마지막으로 새로운 Employee 오브젝트를 Manager 생성자 함수의 원형으로써 대입한다.



프라퍼티 추가 제거하기 Adding and Removing Properties

class-based languages에서 전형적으로 컴파일 타임에 클래스를 생성하고, 컴파일 타임 또는 실행 타임에 인스턴스화 한다. 일단 클래스를 정의한 후에는 멤버나 속성의 타입을 변경할 수 없다. 그러나 Javascript에서는 실행 시간에 객체의  속성을 추가하거나 삭제할 수 있다.  이미 사용되고 있는 오브젝트에 원형으로써 property를 추가한다면 , 그 object의 원형 역시 새로운 property를 가질 것이다.

Summary of Differences

Class-based (Java)

Prototype-based (JavaScript)

Class and instance 구별되는 속성이다.

모든 objects instance 이다.

클래스를 정의하는 것은 클래스 정의와 클래스를 정의하는 생성자 메소드의 정의이다.

정의한.생성자 함수로 오브젝트를 생성한다.

new연산자를 이용하여 오브젝트를 생성한다.

Same.

이미 존재하는 클래스를 이용하여 클래스의 계층구조를 구축한다.

생성자 함수로 구성되어 있는 함수의 원형을 대입함으로써 계층구조를 구축한다.

클래스 연쇄를 따라서 속성을 상속 받는다.

원형의 연쇄에 따라서 속성을 상속 받는다.

클래스 정의는 모든 인스턴스의 속성을 지정하며. 실행타임에 동적으로 추가 없다.

생성자 함수 또는 원형은 속성을 지정할 있다. 모든 오브젝트의 집합 또는 개개의 오브젝트는 실행 타임에 동적으로 프라퍼티를 추가 또는 삭제 있다.


### 끝.

[이 포스트는 새로운 블로그 운영으로, 이전 블로그 http://smack.kr/174 
Core JavaScript 1.5 Guide: class-Based vs. Prototype-Based Language, 2008년 3월 4일 포스트,
의 글을 수정하여 다시 포스트 한 것입니다.]

Prototype-Based 에 대한 더 읽을 자료.

저작자 표시
신고

이 글을 Twitter / Facebook 에 공유하기
이 글이 유익하다면 아래의 트위터 버튼을 눌러 공유해 주시거나, 페이스북 "좋아요" 버튼을 눌러 주세요.

   


Posted by 반더빌트


티스토리 툴바