[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

57
미미미미 미미미 미미미미미미 미미미미미미 미미 ES6, TypeScript, Angular2, Ionic2 ( 미 ) 미미미미미 미미미미미미 미미미미미미 UI 미미 미미미

Upload: -

Post on 10-Jan-2017

7.845 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

미리보는 대규모 자바스크립트 어플리케이션 개발

ES6, TypeScript, Angular2, Ionic2

( 주 ) 한빛소프트 포털서비스실 서비스개발팀 UI 파트

김수호

Page 2: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

자바스크립트는 ..브랜든아이크가 만들고 ..

모카라는 이름으로 ..

나중에는 라이브스크립트로 ..

그러다 자바스크립트로 ..

Page 3: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

ECMAScript 의 발전 과정1996.03넷스케이프 자바스크립트

1996.08Microsoft IE 3.0JScript

1996.11ECMA-262

1997.06ECMAScript 초판

1998.06ECMAScript 2 판

1999.12ECMAScript 3 판

2009.12ECMAScript 5 판

2011.06ECMAScript 5.1 판

2015.06ECMAScript 6 판

Page 4: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

ES61996.03넷스케이프 자바스크립트

1996.08Microsoft IE 3.0JScript

1996.11ECMA-262

1997.06ECMAScript 초판

1998.06ECMAScript 2 판

1999.12ECMAScript 3 판

2009.12ECMAScript 5 판

2011.06ECMAScript 5.1 판

2015.06ECMAScript 6 판

ES6, ES2015, Harmony, ECMA6….다양한 이름으로 불림

Page 5: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

당신이 알고 있는 자바스크립트는 ?

Page 6: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

1999 년 12 월에 나온 ECMAScript 3 판일 가능성

99%

아님말고 ..

Page 7: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

ES5 Specification ( 2011.06 )Object.createObject.definePropertyObject.definePropertiesObject.getPrototypeOfObject.keysObject.sealObject.freezeObject.preventExtensionsObject.isSealedObject.isFrozenObject.isExtensibleObject.getOwnPropertyDescriptorObject.getOwnPropertyNames

Date.prototype.toISOStringDate.nowDate.prototype.toJSONDate.parse on invalid dates

Array.prototype.indexOfArray.prototype.lastIndexOfArray.prototype.everyArray.prototype.someArray.prototype.forEachArray.prototype.mapArray.prototype.filterArray.prototype.reduceArray.prototype.reduceRight

Page 8: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Object.createvar obj = Object.create(Object.prototype, { foo : { value: 'bar', // 초기화 writable: false, // 읽기만 가능 ( 값 재할당 불가 ) configurable: false, // 삭제 불가 enumerable: false // 열거 불가 }});

Page 9: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Date.now

var date_old_stx = new Date().getTime();var date_new_stx = Date.now();

Page 10: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Array.prototype.somevar arr = [2, 4, 9, 10, 11];arr.some(function(element, index, array){ return element > 10; //true});

Page 11: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

ES5 스펙은 , 모던 브라우저에서 95 ~ 100% 구현되어 있다 .

모던 브라우저 >= IE9

Page 12: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

오늘 주제의 기저는2015 년 6 월에 공표된

ES5 의 다음 버전인 ES6ES7 도 ..

Page 13: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

ES6 Specification ( 2015.06 )ModulesClassesArrow functionsDefault parametersDestructuringSpread and restLet and constfor ... of

Object literal methodsShorthand propertiesComputed propertiesOctal / binary literalsSymbolsTemplate stringsGeneratorsDecoratorsasync /await

Page 14: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Arrow Functionfunction PersonOldStx(){ this.age = 0; var self = this; setInterval(function(){ self.age++; }, 1000)}

function PersonNewStx(){ this.age = 0;

setInterval(()=>{ this.age++ }, 1000);}

Page 15: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Classclass CustomDate extends Date { constructor() { super(); } getMonth() { var MONTHS = [

'1 월 ','2 월 ','3 월 ','4 월 ','5 월 ','6 월 ','7 월 ','8 월 ','9 월 ','10 월 ','11 월 ','12 월’

]; return MONTHS[super.getMonth()]; }}

Page 16: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Promise(function(){ "use strict"; function ajax(){ return new Promise((resolve, reject) => { setTimeout(resolve, 1000); }); }

ajax().then((result) => { if(!result){ throw new Error(' 에러 '); } });}());

Page 17: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Object.observe (ES7)var obj;(function(){ "use strict"; obj = { foo : 0, bar : 1 }; Object.observe(obj, (changes) => { console.log(changes) });}());

Page 18: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

잠깐 !

ES5 도 IE9 이상에서 지원되는 마당에한국에서 ES6, ES7 이 무슨 소용 ?

Page 19: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

TypeScript 가 출동한다면 ?

Page 20: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

TypeScript?

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.

Page 21: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Page 22: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Goal

Make JavaScript development more productive and enjoyable…especially on large projects.

Page 23: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Static Type vs Dynamic Type

Page 24: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Page 25: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

JavaScriptfunction Greeter(greeting) { this.greeting = greeting;}Greeter.prototype.greet = function() { return "Hello, " + this.greeting;}var greeter = new Greeter({message: "world"});console.log(greeter.greet()); //Hello, [object Object]

Page 26: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Typesfunction Greeter(greeting: string) { this.greeting = greeting;}Greeter.prototype.greet = function() { return "Hello, " + this.greeting;}var greeter = new Greeter("world");console.log(greeter.greet());

Page 27: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Class(TypeScript)class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; }}var greeter = new Greeter("world");console.log(greeter.greet());

변환 Greeter.js ES3 or ES5

Page 28: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Class(Plain JavaScript)var Greeter = (function () { function Greeter(message) { this.greeting = message; } Greeter.prototype.greet = function () { return "Hello, " + this.greeting; }; return Greeter;})();var greeter = new Greeter("world");console.log(greeter.greet());

변환Greeter.ts

Page 29: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Inheritance(TypeScript)class Animal { constructor(public name: string) { } move(meters: number) { alert(this.name + " moved " + meters + "m."); }}class Snake extends Animal { constructor(name: string) { super(name); } move() { alert("Slithering..."); super.move(5); }}

class Horse extends Animal { constructor(name: string) { super(name); } move() { alert("Galloping..."); super.move(45); }}var sam = new Snake("Sammy the Python");var tom: Animal = new Horse("Tommy the Palomino");sam.move();tom.move(34);

Page 30: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Inheritance(Plain JavaScript)var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) :

(__.prototype = b.prototype, new __()); };var Animal = (function () { function Animal(name) { this.name = name; } Animal.prototype.move = function (meters) { alert(this.name + " moved " + meters + "m."); }; return Animal;})();

var Snake = (function (_super) { __extends(Snake, _super); function Snake(name) { _super.call(this, name); } Snake.prototype.move = function () { alert("Slithering..."); _super.prototype.move.call(this, 5); }; return Snake;})(Animal);var Horse = (function (_super) { // 생략 return Horse;})(Animal);var sam = new Snake("Sammy the Python");var tom = new Horse("Tommy the Palomino");sam.move();tom.move(34);

Page 31: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Genericsclass Greeter<T> { greeting: T; constructor(message: T) { this.greeting = message; } greet() { return this.greeting; }}var greeter = new Greeter<string>("Hello, world");

Page 32: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Module(TypeScript)module Sayings { export class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; } }}var greeter = new Sayings.Greeter("world");

Page 33: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Module(Plain JavaScript)var Sayings;(function (Sayings) { var Greeter = (function () { function Greeter(message) { this.greeting = message; } Greeter.prototype.greet = function () { return "Hello, " + this.greeting; }; return Greeter; })(); Sayings.Greeter = Greeter;})(Sayings || (Sayings = {}));var greeter = new Sayings.Greeter("world");

Page 34: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

TypeScript Language Specification

https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md

Page 35: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

왜 이리 C# 스러워 ?Java 냄새도 나고 ..

Page 36: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Microsoft 에서 만들었으니깐 .

Page 37: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Anders Hejlsberg 가 개발중이니까 . C# 수석아키텍트이고델파이 , 터보파스칼을 만든 .

Page 38: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

이거 써야하나 ? 안내킨다 . MS 라서 .공공의 적 이라서 .비슷한 CoffeeScript 도 있고 .구글이 만든 AtScript 는 ?

Page 39: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

구글이 AtScript 를 중단하고 TypeScript 로 대동단결 .

Angular2 에 TypeScript 를 적용 .ES5 로 Angular2 해도 된다 . 근데 구글링하면 뭘로 짠 코드가 나올까 ?

Page 40: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

진행상황 ?시기상조 ?

Page 41: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Page 42: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Page 43: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

진행상황 ?

Page 44: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Angular1 개발자가 Angular2 를 하지 않을 가능성 ?

Page 45: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Angular2 Features• Mobile First• Future Ready• Flexible Development• Speed & Performance• Simple & Expressive• Comprehensive Routing• Animations• Hierarchical Dependency Injection• Support for WebComponents• Internationalization(I18N) & Accessibility

Page 46: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Template syntax<button ng-click="execute()"> 실행 </button> <button (click)="execute()"> 실행 </button>

<input type="text" ng-model="model.name" /><input type="text" ([ng-model)]="model.name" />

<li ng-repeat="user in users">{{user.name}}</li><li *ng-for="#user of users">{{user.name}}</li>

Page 47: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Componentimport {bootstrap, Component} from 'angular2/angular2';

@Component({ selector: 'app', template: '<h1> 하드코딩하는사람들 </h1>'})class AppComponent {

}bootstrap(AppComponent);

Page 48: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

불꽃 코딩 시연

자료 만들 시간이 부족했거나 움짤을 만들기 귀찮아서는 절대 아님

Page 49: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Ionic FrameworkIonic is the beautiful, open source front-end SDK for developing hybrid mobile apps with web technologies.

Page 50: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

하이브리드앱 VS 네이티브앱..생산성완성도.

Page 51: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

웹뷰를 알아 ?

Page 52: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

<?xml version="1.0" encoding="utf-8"?><WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.example.com");

Page 53: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Page 54: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

프레임워크의 사용더 나은 생산성동등한 수준의 퀄리티를 확보할 최소한의 기반

성능은 태생적인 한계로 인해 .. 그러나 금 손으로 코딩하면 좀 다름

Page 55: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Page 56: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

Ionic2 sample

https://github.com/wow9144/IonicV2

API 문서도 없을 때 코드 까서 주석 보면서 한땀 한땀 직접 만들어서구 시대의 유물 같은 자료라 코드에서 똥냄새가 나도 양해 부탁드립니다 .

Page 57: [하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발

발표를 마치며 ..