SlideShare a Scribd company logo
{ for AngularJS, React}
고급 자바스크립트
3. staticof class
탑크리에듀
IT기술 칼럼
와 함께하는
{ ES6 }3. static of class
ES6의 클래스문법을 새로운 문법이라고 단순히 받아들이는 것보다는 기존의 사용
법과 비교해서 익히는 것이 좋습니다. 왜냐하면 클래스는 함수를 정의하는 방법중
에 하나일 뿐이기 때문입니다.
이번 시간에는 class 범위 안에서 static 키워드로 선언하는 함수의 정체가 무엇인지
살펴보겠습니다.
ES5에서 함수를 선언한 다음에, 함수도 자체적으로 객체이기 때문에 다음과 같이
필요한 자원을 할당할 수 있습니다. 자바스크립트는 함수를 생성자로 사용해서 만
들어지는 객체의 관점에서 보면 새 객체가 이용할 수 있는 3가지 종류의 자원배분
방법이 있습니다.
1. 객체가 스스로 갖고 있는 프로퍼티를 이용한다.
2. 객체의 부모인 생성자 함수의 프로토타입 객체가 갖고 있는 프로퍼티를 이용한다.
3. 생성자 함수 자체가 객체로써 직접 갖고 있으면서 제공하는 프로퍼티를 이용한다.
{ ES6 }3. static of class
example3.js
functionCar(){}
Car.info= function(){
console.log('Acarisamotorvehicle.');
}
Car.info();//A car isa motorvehicle.
Car.info 처럼 작성된 자원은 정적인 자원입니다.
정적인 자원은 Car 함수를 생성자로 사용하여 만들어지는 새 객체와 그에 따라 이루어지는 상
속관계와 무관합니다.
주로 변하지 않으면서 다수의 객체에서 공통적으로 이용될 수 있는 자원이 설정대상입니다.
이번 시간에는 3번째 방법을 살펴보겠습니다. 함수 문법에서는 다음 예제처럼 작성합니다.
{ ES6 }3. static of class
class3.es6
classCar{
staticinfo(){
console.log('Acar isa motorvehicle.');
}
}
Car.info();//A car isa motorvehicle.
수행결과는 이전 코드와 같습니다.
클래스 범위안에서 선언하므로 프로토타입객체에 추가하는 함수와 구분하기 위해서 함수명
앞에 static 키워드를 설정합니다.
클래스 문법으로는 정적인 변수는 선언할 수 없으나 이전 문법으로는 가능하다는 것을 참고로
알아두시면 좋겠습니다.
위 코드를 새로 도입된 클래스 문법으로 작성하면 다음과 같습니다.
{ ES6 }3. static of class
class3.js
'usestrict';
var_createClass= function(){
functiondefineProperties(target,props){
for(vari= 0;i <props.length;i++){
vardescriptor=props[i];
descriptor.enumerable=descriptor.enumerable|| false;
descriptor.configurable= true;
if("value"in descriptor)
descriptor.writable= true;
Object.defineProperty(target,descriptor.key,descriptor);
}
}
returnfunction(Constructor,protoProps,staticProps){
if(protoProps)
defineProperties(Constructor.prototype,protoProps);
if(staticProps)
defineProperties(Constructor,staticProps);
returnConstructor;
};
}();
다음으로 클래스문법으로 작성된 코드가 트랜스파일링 된 결과를 살펴보겠습니다.
{ ES6 }3. static of class
function_classCallCheck(instance,Constructor){
if(!(instanceinstanceofConstructor)){
thrownewTypeError("Cannotcalla classasafunction");
}
}
varCar=function(){
functionCar(){
_classCallCheck(this,Car);
}
_createClass(Car,null, [
{
key:'info',
value:functioninfo(){
console.log('Acarisa motorvehicle.');
}
}
]);
returnCar;
}();
Car.info();
//# sourceMappingURL=C:Lessonecmascript20170328what-is-classclass3class3.js.map
{ ES6 }3. static of class
_createClass(Car,null, [
{
key:'info',
value:functioninfo(){
console.log('Acarisa motorvehicle.');
}
}
]);
코드를 부분적으로 살펴보겠습니다.
첫 번째 파라미터로 Car 함수를, 세 번째 파라미터로 배열을 전달합니다.
이는 다음 코드를 거쳐 defineProperties 함수에 전달됩니다.
if (staticProps)
defineProperties(Constructor,staticProps);
{ ES6 }3. static of class
functiondefineProperties(target,props){
for(vari= 0;i <props.length;i++){
vardescriptor=props[i];
descriptor.enumerable=descriptor.enumerable|| false;
descriptor.configurable= true;
if("value"in descriptor)
descriptor.writable= true;
Object.defineProperty(target,descriptor.key,descriptor);
}
}
defineProperties 함수의 로직을 살펴봅니다.
{ ES6 }3. static of class
console.log(target);
/*
[Function:Car]
*/
console.log(descriptor);
/*
{ key:'info',
value:[Function:info],
enumerable:false,
configurable:true,
writable:true}
*/
Object.defineProperty(target,descriptor.key,descriptor);
중간에 로그를 남겨서 살펴보면, 위 로직은 다음처럼 처리하는 것 입니다.
value: 프로퍼티에할당된값
enumerable:for-in루프나Object.keys()메소드를사용하여열거할수있다.
configurable:프로퍼티속성을변경,삭제할수있다.
writable: 할당연산자로값을변경할수 있다.
Object.defineProperty 함수를 사용하여 함수 Car에 프로퍼티 info를 추가합니다. 프로퍼티
info는 데이터 프로퍼티로써 다음과 같은 속성을 갖고 있습니다..
{ ES6 }3. static of class
ES5 문법에서, 함수를 객체로 보고 함수객체에 직접 추가하는 자원들은, 새로운 클래스 문법에
서는 클래스 범위내에 선언하고 함수앞에 static 키워드를 붙이면 됩니다.
class Car{
static info() {
console.log('A car is a motor vehicle.');
}
}
Car.info();
ES6 문법
function Car(){}
Car.info=function() {
console.log('A car is a motor vehicle.');
}
Car.info();// Acar is a motor vehicle.
ES5 문법
{ ES6 }3. static of class
{ key:'info',
value:[Function:info],
enumerable:false,
configurable:true,
writable:true}
결과가 같기 때문에 다른점이 없다고 생가할 수도 있습니다만, 약간 다른 부분이 존재합니다.
다른 부분이 무엇인지 살펴보겠습니다.
다음은 클래스 문법으로 추가된 static 함수를 대상으로 하는 프로퍼티 서술객체의 내용입니다.
열거대상이 아니라고 설정되어 있습니다.
{ ES6 }3. static of class
example3.js
functionCar(){}
Car.info= function(){
console.log('Acarisamotorvehicle.');
}
Car.info();//A car isa motorvehicle.
vardescriptor= Object.getOwnPropertyDescriptor(Car,'info');
console.log(descriptor);
//ES5 함수문법으로추가된static한함수의프로퍼티서술객체의내용
//(디폴트데이터프로퍼티의설정값)
/*
{ value:[Function],
writable:true,
enumerable:true,
configurable:true}
*/
다음으로 기본 ES5 함수문법으로 선언된 정적인 자원의 서술정보를 살펴봅니다.
{ ES6 }3. static of class
앞선 예제와는 다르게 “enumerable: true”로 설정되어 있습니다. 따라서, 객체의 프로퍼티들을
대상으로 루프 처리 시 함수 info도 포함된다는 것을 알 수 있습니다.
대부분의 경우 함수는 루프 처리대상이 아닙니다. 이렇게 포함되어 있으면 함수를 제외하는
코드가 루프 처리 시 부가적으로 필요하게 됩니다.
따라서, 새로운 클래스 문법에서는 enumerable: false로 설정한다고 볼 수 있습니다.
추가로 언급하자면, 클래스 문법에서는 정적인 변수는 취급대상이 아니므로 항상 enumerable:
false로 설정해서 사용해도 문제가 되지 않습니다.
분석을 통해 우리는 클래스문법으로 정의한 static 함수는 루프 처리 시, 제외되는 성질을 띄고
있다는 것을 알 수 있었습니다.
자바스크립트는 ES5 버전에서 개발자가 객체의 프로퍼티의 성질을 조정해서 사용할 수 있는
기능을 제공하고 있습니다.
이것이 Property Descriptor(프로퍼티 서술자)의 쓰임새 입니다.
{ ES6 }3. static of class
송석원
현재 :
- 탑크리에듀교육센터 자바, 스프링 프레임워크, JPA, Querydsl,
AngularJS, React, Android 분야 전임강사
경력 :
- 오라클자바커뮤니티교육센터
자바, 스프링, JPA, Node.JS, AngularJS, React, Android 전임강사
- 탑크리에듀 교육센터
Java, Spring Data JPA, Querydsl, SQL 교재 편찬위원
- 회원수 14,000명의 오라클자바커뮤니티 운영 및 관리
- SK T-아카데미 스프링 프레임워크 강의
- 정철 어학원
탑크리에듀교육센터 Tel. 02-851-4790 http://www.topcredu.co.kr
Copyrights ⓒ Topcredu. All rights Reserved.

More Related Content

PDF
Start IoT with JavaScript - 1.기초
PDF
STL study (skyLab)
PPTX
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
PDF
Start IoT with JavaScript - 6.함수
PPTX
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
PDF
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
PPTX
파이썬 class 및 function namespace 이해하기
PDF
Scala type class pattern
Start IoT with JavaScript - 1.기초
STL study (skyLab)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
Start IoT with JavaScript - 6.함수
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
파이썬 class 및 function namespace 이해하기
Scala type class pattern

What's hot (20)

PPTX
파이썬 Special method 이해하기
PPTX
파이썬+함수 데코레이터+이해하기 20160229
PPTX
파이썬 namespace Binding 이해하기
PPTX
프론트엔드스터디 E03 - Javascript intro.
PPTX
파이썬 프로퍼티 디스크립터 이해하기
PDF
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
PPTX
Javascript introduction, dynamic data type, operator
PPTX
모어이펙티브 C++ 5,6
PDF
Start IoT with JavaScript - 5.객체2
PPTX
python data model 이해하기
PPTX
파이썬 class 및 인스턴스 생성 이해하기
PPTX
파이썬 플라스크 이해하기
PPTX
프론트엔드스터디 E04 js function
PDF
The c++ programming language 10장 클래스 발표
PPTX
파이썬 Xml 이해하기
PPTX
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
PPTX
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
PPTX
파이썬 xml 이해하기
PDF
Stl vector, list, map
PPTX
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
파이썬 Special method 이해하기
파이썬+함수 데코레이터+이해하기 20160229
파이썬 namespace Binding 이해하기
프론트엔드스터디 E03 - Javascript intro.
파이썬 프로퍼티 디스크립터 이해하기
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
Javascript introduction, dynamic data type, operator
모어이펙티브 C++ 5,6
Start IoT with JavaScript - 5.객체2
python data model 이해하기
파이썬 class 및 인스턴스 생성 이해하기
파이썬 플라스크 이해하기
프론트엔드스터디 E04 js function
The c++ programming language 10장 클래스 발표
파이썬 Xml 이해하기
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
파이썬 xml 이해하기
Stl vector, list, map
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
Ad

Similar to (고급자바스크립트강좌 for AngularJS, React)static of class,class 범위 안에서 static 키워드로 선언하는 함수의 정체 (20)

PPTX
자바스크립트 클래스의 프로토타입(prototype of class)
PDF
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
PPTX
Javascript
PDF
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
PPTX
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
PPTX
ECMA Script 5 & 6
PPTX
Hacosa js study 2주차
PPTX
파이썬+주요+용어+정리 20160304
DOCX
Javascript 완벽 가이드 정리
PDF
JVM 메모리 해부학
PPTX
ECMAScript 6의 새로운 것들!
PDF
Javascript 교육자료 pdf
PDF
overview of spring4
PDF
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PDF
Jstl_GETCHA_HANJUNG
PDF
SpringCamp 2013 : About Jdk8
PDF
Collection framework
PPTX
자바로 배우는 자료구조
PPTX
Jquery javascript_ed10
PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
자바스크립트 클래스의 프로토타입(prototype of class)
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
Javascript
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
ECMA Script 5 & 6
Hacosa js study 2주차
파이썬+주요+용어+정리 20160304
Javascript 완벽 가이드 정리
JVM 메모리 해부학
ECMAScript 6의 새로운 것들!
Javascript 교육자료 pdf
overview of spring4
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
Jstl_GETCHA_HANJUNG
SpringCamp 2013 : About Jdk8
Collection framework
자바로 배우는 자료구조
Jquery javascript_ed10
5.Spring IoC&DI(DI와 관련된 어노테이션)
Ad

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

PDF
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
PDF
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
PDF
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
PPTX
[IT교육/IT학원]Develope를 위한 IT실무교육
PPTX
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
PPTX
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
PPTX
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
PPTX
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
PPTX
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
PDF
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
PDF
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
PPTX
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
PPTX
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
PDF
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
PPTX
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
PPTX
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
PPTX
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
[IT교육/IT학원]Develope를 위한 IT실무교육
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]

(고급자바스크립트강좌 for AngularJS, React)static of class,class 범위 안에서 static 키워드로 선언하는 함수의 정체

  • 1. { for AngularJS, React} 고급 자바스크립트 3. staticof class 탑크리에듀 IT기술 칼럼 와 함께하는
  • 2. { ES6 }3. static of class ES6의 클래스문법을 새로운 문법이라고 단순히 받아들이는 것보다는 기존의 사용 법과 비교해서 익히는 것이 좋습니다. 왜냐하면 클래스는 함수를 정의하는 방법중 에 하나일 뿐이기 때문입니다. 이번 시간에는 class 범위 안에서 static 키워드로 선언하는 함수의 정체가 무엇인지 살펴보겠습니다. ES5에서 함수를 선언한 다음에, 함수도 자체적으로 객체이기 때문에 다음과 같이 필요한 자원을 할당할 수 있습니다. 자바스크립트는 함수를 생성자로 사용해서 만 들어지는 객체의 관점에서 보면 새 객체가 이용할 수 있는 3가지 종류의 자원배분 방법이 있습니다. 1. 객체가 스스로 갖고 있는 프로퍼티를 이용한다. 2. 객체의 부모인 생성자 함수의 프로토타입 객체가 갖고 있는 프로퍼티를 이용한다. 3. 생성자 함수 자체가 객체로써 직접 갖고 있으면서 제공하는 프로퍼티를 이용한다.
  • 3. { ES6 }3. static of class example3.js functionCar(){} Car.info= function(){ console.log('Acarisamotorvehicle.'); } Car.info();//A car isa motorvehicle. Car.info 처럼 작성된 자원은 정적인 자원입니다. 정적인 자원은 Car 함수를 생성자로 사용하여 만들어지는 새 객체와 그에 따라 이루어지는 상 속관계와 무관합니다. 주로 변하지 않으면서 다수의 객체에서 공통적으로 이용될 수 있는 자원이 설정대상입니다. 이번 시간에는 3번째 방법을 살펴보겠습니다. 함수 문법에서는 다음 예제처럼 작성합니다.
  • 4. { ES6 }3. static of class class3.es6 classCar{ staticinfo(){ console.log('Acar isa motorvehicle.'); } } Car.info();//A car isa motorvehicle. 수행결과는 이전 코드와 같습니다. 클래스 범위안에서 선언하므로 프로토타입객체에 추가하는 함수와 구분하기 위해서 함수명 앞에 static 키워드를 설정합니다. 클래스 문법으로는 정적인 변수는 선언할 수 없으나 이전 문법으로는 가능하다는 것을 참고로 알아두시면 좋겠습니다. 위 코드를 새로 도입된 클래스 문법으로 작성하면 다음과 같습니다.
  • 5. { ES6 }3. static of class class3.js 'usestrict'; var_createClass= function(){ functiondefineProperties(target,props){ for(vari= 0;i <props.length;i++){ vardescriptor=props[i]; descriptor.enumerable=descriptor.enumerable|| false; descriptor.configurable= true; if("value"in descriptor) descriptor.writable= true; Object.defineProperty(target,descriptor.key,descriptor); } } returnfunction(Constructor,protoProps,staticProps){ if(protoProps) defineProperties(Constructor.prototype,protoProps); if(staticProps) defineProperties(Constructor,staticProps); returnConstructor; }; }(); 다음으로 클래스문법으로 작성된 코드가 트랜스파일링 된 결과를 살펴보겠습니다.
  • 6. { ES6 }3. static of class function_classCallCheck(instance,Constructor){ if(!(instanceinstanceofConstructor)){ thrownewTypeError("Cannotcalla classasafunction"); } } varCar=function(){ functionCar(){ _classCallCheck(this,Car); } _createClass(Car,null, [ { key:'info', value:functioninfo(){ console.log('Acarisa motorvehicle.'); } } ]); returnCar; }(); Car.info(); //# sourceMappingURL=C:Lessonecmascript20170328what-is-classclass3class3.js.map
  • 7. { ES6 }3. static of class _createClass(Car,null, [ { key:'info', value:functioninfo(){ console.log('Acarisa motorvehicle.'); } } ]); 코드를 부분적으로 살펴보겠습니다. 첫 번째 파라미터로 Car 함수를, 세 번째 파라미터로 배열을 전달합니다. 이는 다음 코드를 거쳐 defineProperties 함수에 전달됩니다. if (staticProps) defineProperties(Constructor,staticProps);
  • 8. { ES6 }3. static of class functiondefineProperties(target,props){ for(vari= 0;i <props.length;i++){ vardescriptor=props[i]; descriptor.enumerable=descriptor.enumerable|| false; descriptor.configurable= true; if("value"in descriptor) descriptor.writable= true; Object.defineProperty(target,descriptor.key,descriptor); } } defineProperties 함수의 로직을 살펴봅니다.
  • 9. { ES6 }3. static of class console.log(target); /* [Function:Car] */ console.log(descriptor); /* { key:'info', value:[Function:info], enumerable:false, configurable:true, writable:true} */ Object.defineProperty(target,descriptor.key,descriptor); 중간에 로그를 남겨서 살펴보면, 위 로직은 다음처럼 처리하는 것 입니다. value: 프로퍼티에할당된값 enumerable:for-in루프나Object.keys()메소드를사용하여열거할수있다. configurable:프로퍼티속성을변경,삭제할수있다. writable: 할당연산자로값을변경할수 있다. Object.defineProperty 함수를 사용하여 함수 Car에 프로퍼티 info를 추가합니다. 프로퍼티 info는 데이터 프로퍼티로써 다음과 같은 속성을 갖고 있습니다..
  • 10. { ES6 }3. static of class ES5 문법에서, 함수를 객체로 보고 함수객체에 직접 추가하는 자원들은, 새로운 클래스 문법에 서는 클래스 범위내에 선언하고 함수앞에 static 키워드를 붙이면 됩니다. class Car{ static info() { console.log('A car is a motor vehicle.'); } } Car.info(); ES6 문법 function Car(){} Car.info=function() { console.log('A car is a motor vehicle.'); } Car.info();// Acar is a motor vehicle. ES5 문법
  • 11. { ES6 }3. static of class { key:'info', value:[Function:info], enumerable:false, configurable:true, writable:true} 결과가 같기 때문에 다른점이 없다고 생가할 수도 있습니다만, 약간 다른 부분이 존재합니다. 다른 부분이 무엇인지 살펴보겠습니다. 다음은 클래스 문법으로 추가된 static 함수를 대상으로 하는 프로퍼티 서술객체의 내용입니다. 열거대상이 아니라고 설정되어 있습니다.
  • 12. { ES6 }3. static of class example3.js functionCar(){} Car.info= function(){ console.log('Acarisamotorvehicle.'); } Car.info();//A car isa motorvehicle. vardescriptor= Object.getOwnPropertyDescriptor(Car,'info'); console.log(descriptor); //ES5 함수문법으로추가된static한함수의프로퍼티서술객체의내용 //(디폴트데이터프로퍼티의설정값) /* { value:[Function], writable:true, enumerable:true, configurable:true} */ 다음으로 기본 ES5 함수문법으로 선언된 정적인 자원의 서술정보를 살펴봅니다.
  • 13. { ES6 }3. static of class 앞선 예제와는 다르게 “enumerable: true”로 설정되어 있습니다. 따라서, 객체의 프로퍼티들을 대상으로 루프 처리 시 함수 info도 포함된다는 것을 알 수 있습니다. 대부분의 경우 함수는 루프 처리대상이 아닙니다. 이렇게 포함되어 있으면 함수를 제외하는 코드가 루프 처리 시 부가적으로 필요하게 됩니다. 따라서, 새로운 클래스 문법에서는 enumerable: false로 설정한다고 볼 수 있습니다. 추가로 언급하자면, 클래스 문법에서는 정적인 변수는 취급대상이 아니므로 항상 enumerable: false로 설정해서 사용해도 문제가 되지 않습니다. 분석을 통해 우리는 클래스문법으로 정의한 static 함수는 루프 처리 시, 제외되는 성질을 띄고 있다는 것을 알 수 있었습니다. 자바스크립트는 ES5 버전에서 개발자가 객체의 프로퍼티의 성질을 조정해서 사용할 수 있는 기능을 제공하고 있습니다. 이것이 Property Descriptor(프로퍼티 서술자)의 쓰임새 입니다.
  • 14. { ES6 }3. static of class 송석원 현재 : - 탑크리에듀교육센터 자바, 스프링 프레임워크, JPA, Querydsl, AngularJS, React, Android 분야 전임강사 경력 : - 오라클자바커뮤니티교육센터 자바, 스프링, JPA, Node.JS, AngularJS, React, Android 전임강사 - 탑크리에듀 교육센터 Java, Spring Data JPA, Querydsl, SQL 교재 편찬위원 - 회원수 14,000명의 오라클자바커뮤니티 운영 및 관리 - SK T-아카데미 스프링 프레임워크 강의 - 정철 어학원 탑크리에듀교육센터 Tel. 02-851-4790 http://www.topcredu.co.kr Copyrights ⓒ Topcredu. All rights Reserved.