SlideShare una empresa de Scribd logo
1 de 37
component-based development using Angular2
Angular2를 활용한 컴포넌트 중심의 개발
160514 대구개발자그룹 정진욱
• Google이 만든 open-source web application
MV* framework
• MEAN stack중 Frontend 파트에 해당
– MEAN = MongoDB + ExpressJS + AngularJS +
Node.JS
AngularJS?
• 2014년 10월
– ngEurope conference에서 첫소개
• 2015년 4월 30일 (Alpha Version)
• 2015년 12월 (Beta Version)
– https://angular.io/ 에서 다운로드 받을 수 있게됨
• 2016년 5월
– 첫 release candidate가 되어 출시함
Angular2의 History
• Angular 1의 주요 컨셉이 사라짐
– Deprecated : Controllers, Directive Definition Object,
$scope, angular.module, jqLite
• Angular 2는 쉽다.
– Angular1의 주요 컨셉은 사라졌지만, 2는 Javascript
Class 구축에만 집중할 수 있게 한다.
• TypeScript를 이용한다.
– JS의 상위집합업어 OOP 지원, 명확한 형정의 제공으
로 가독성의 장점, 프리컴파일이 필요
Angular2의 중요특징
• 브라우저 지원
– 크롬, 파폭, 오페라, 사파리, IE11, Android, iOS 6+
(PC보다는, 모바일 앱을 위한 프레임워크)
• 기타 눈여겨볼 특징
– Angular 1의 확장이 아닌, 2는 새로 만들었다.
– Angular 2는 모바일을 고려하여 적은 대역폭으로 이
용할 수 있도록 하였다.
– Angular 1에 비해 빠르다. (3~10배)
Angular2의 중요특징
Angular1 vs Angular2
Reference : http://teropa.info/blog/2015/10/18/refactoring-angular-apps-to-components.html
• Component를 이용한 탬플릿과 서비스 로직 관리
Angular2의 아키텍쳐
• Component 정의
– 기능 명세에 의한 개발
– 명세 따른 배포, 조립 가능한 독립 구성단위
– 컴포넌트는 인터페이스만을 통해서 접근 (예 : WSDL)
• Component 중심개발의 특징
– 관심사분리의 개발 방법으로 컴포넌트간 연결이 느슨
하다(loosely coupled).
– 컴포넌트 재활용에 초점을 맞춘다.
컴포넌트 중심의 개발
• Front-End에서의 컴포넌트
– 커스텀 엘리먼트(HTML5)로 볼 수 있다
– Angular2에서 컴포넌트는 특정 Element를 의미한다.
– 사용예 : <my-component></my-component>
• Angular 1의 컴포넌트
– directives, controllers, Scope에 의해 구현
– 컴포넌트에 해당하는 directive는 Angular1의 구성요
소의 일부였다.
Angular2의 컴포넌트
• 컴포넌트 중심의 Angular2
– Angular2는 컴포넌트 중심으로 개발을 진행한다.
– 컴포넌트는 Template과 Logic을 포함한다.
– component는 하나의 독립적인 모듈결합을 가진다.
– component는 다른 component나 service를 의존주입
받을 수 있다.
Angular2의 컴포넌트
Angular2를 활용한 컴포넌트 중심의 개발
Component Component-Based System
Import {Component, .. } from ‘@angular/core’;
Import {Http,Headers .. } from ‘@angular/http’;’
...
@Component({ selector: 'app' })
@Injectable()
export class App{
constructor(http:Http){
...
}
}
Import {Component, .. } from ‘@angular/core’;
Import {Http,Headers .. } from ‘@angular/http’;’
...
@Component({ selector: 'app' })
@Injectable()
export class App{
constructor(http:Http){
...
}
}
Import {Component, .. } from ‘@angular/core’;
...
@Component({ selector: 'app' })
export class App{
constructor(){
...
}
} Component-Based
Angular2 Application
Angular2 Component
Angular2의 컴포넌트
import {Component} from ‘@angular2/angular2'
@Component({
selector: 'my-component',
template: '<div>Hello my name is {{name}}. <button
(click)=“sayHello()">Say Hello</button></div>'
})
export class MyComponent {
constructor() {
this.name = 'Programmer'
}
sayHello () {
console.log('My name is', this.name)
}
}
• Angular2의 컴포넌트 정의
• 아키텍쳐의 주요 구성단위는 다음과 같다.
– Module , Component, Template
– Metadata, Data Binding, Directive
– Service, Dependency Injection
Angular2의 주요 구성단위
• Angular는 많은 모듈로 이루어져있다.
• Module은 다른 모듈에 의해 Import 될 수 있다.
– Import시 핵심모듈은 ‘@’을 붙인다.
• @angular/core (angular 핵심모듈)
• @angular/common, @angular/router, and @angular/http ...
• Module은 export할때 여러 자료형을 가진다.
– Classes, function, values
1. Module
• 핵심모듈 Import
– import { Component } from '@angular/core';
• RC 버전이후에 반영
• 사용자 정의 모듈 Import
– import { AppComponent } from './app.component';
1. Module
• 컴포넌트는 함수를 통해 View를 바인딩 컨트롤
2. Component
import {Component} from 'angular2/core';
@Component({
selector: 'my-app',
template: ‘...’
})
export class AppComponent {
name ='';
district = ['namgu', 'bukgu', 'seogu', 'suseonggu'];
constructor() {
this.name = 'daegu'
}
sayCityName() {
alert('Our city name is '+this.name);
}
}
Module
=AppComponent
Metadata
To the Class
• Component가 Render하여 생성된다.
3. Template
<h2>Hero List</h2>
<p><i>Pick a hero from the list</i></p>
<div *ngFor="let hero of heroes" (click)="selectHero(hero)">
{{hero.name}}
</div>
<hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>
• Angular가 Class를 어떻게 처리해야 할지를 정의
4. Metadata
@Component({
selector: 'hero-list',
templateUrl: 'app/hero-list.component.html',
directives: [HeroDetailComponent],
providers: [HeroService]
})
export class HeroesComponent { ... }
5. Data Binding
• Component의 탬플릿은 모듈내 function에 의해
제어되고, Two Way Binding된 변수(model)를 통
해 rendering 된다.
<div>{{hero.name}}</div>
<hero-detail [hero]="selectedHero"></hero-detail>
<div (click)="selectHero(hero)"></div>
5. Data Binding
• Two way binding
– ngModel directive를 이용하여 모델은 Element에 연
결되고, 모듈이 이를 제어한다.
<input [(ngModel)]="hero.name">
6. Directive
• Directive를 통해 Template은 동적으로 변경됨
– Angular에서 제공하는 대표적인 Directive
• ngFor는 list에 대한 item을 출력
• ngModel directive는 two-way binding을 함
• ngIf는 component의 포함여부를 결정
<div *ngFor="let hero of heroes"></div>
<hero-detail *ngIf="selectedHero"></hero-detail>
6. Directive
• 컴포넌트에서 사용자 Directive를 Import가능
import { Directive, ElementRef, Input } from '@angular/core';
@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
import { Component } from '@angular/core';
import { HighlightDirective } from './highlight.directive';
@Component({
selector: 'my-app',
templateUrl: 'app/app.component.html',
directives: [HighlightDirective]
})
export class AppComponent { }
directive definition
Using directive
• Template에서 attribute directive는 [Directive
명]=“string literals” 형태로 사용
6. Directive
<p [myHighlight]="color" [defaultColor]="'violet'">
Highlight me too!
</p>
import { Injectable } from '@angular/core';
import { HEROES } from './mock-heroes';
@Injectable() //서비스 클래스에 추가해야
하는 Injectable Decorator
export class HeroService {
getHeroes() {
return HEROES;
}
}
7. Service
• 재사용이 빈번한 기능을 서비스로 정의함
import { Hero } from './hero';
export var HEROES: Hero[] = [
{"id": 11, "name": "Mr. Nice"},
{"id": 12, "name": "Narco"},
{"id": 13, "name": "Bombasto"},
{"id": 14, "name": "Celeritas"},
{"id": 15, "name": "Magneta"},
{"id": 16, "name": "RubberMan"},
{"id": 17, "name": "Dynama"},
{"id": 18, "name": "Dr IQ"},
{"id": 19, "name": "Magma"},
{"id": 20, "name": "Tornado"}
];
Heroservice.ts
Return the mock hero
mock-heroes.ts
• 서비스가 의존성을 가지는 경우 constructor
injection pattern을 이용해 주입받는다.
7. Service
import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { Logger } from '../logger.service';
@Injectable()
export class HeroService {
constructor(private logger: Logger) { }
getHeroes() {
this.logger.log('Getting heroes ...')
return HEROES;
}
}
• Construct의 parameter를 통한 서비스 주입
8. Dependency Injection
import { Component } from '@angular/core';
import { Hero } from './hero';
import { HeroService } from './hero.service';
@Component({
selector: 'hero-list',
template: `<div *ngFor="let hero of heroes">{{hero.id}} - {{hero.name}}
</div>`,
})
export class HeroListComponent {
heroes: Hero[];
constructor(heroService: HeroService) {
this.heroes = heroService.getHeroes();
} }
With D.I
• Constructor 주입 미사용시 변수에 직접할당
8. Dependency Injection
import { Component } from '@angular/core';
import { HEROES } from './mock-heroes';
@Component({
selector: 'hero-list',
template: `
<div *ngFor="let hero of heroes">
{{hero.id}} - {{hero.name}}
</div>
`,
})
export class HeroListComponent {
heroes = HEROES;
}
Without D. I.
• Typescript는 JS의 상위집합(superset) 언어
– ES2016+ 특징을 가진다.
- Typescript = ES6 + TYpes + Annotaions
- Generics나 Lambdas를 이용할 수 있다.
• Javascript의 결점 보완
– OOP(상속, 인터페이스 등) 지원
– Primitive Type 지원 (num, string, boolean..) 으로 가
독성의 장점
Typescript의 특징
• 프리컴파일 언어
– coffescript, atscript, typescript
• Javascript의 미래버전인 Ecma Script 사용
– ECMA Script는 Ecma International의 기술규격에 정
의된 스크립트 언어
– Javascript는 ECMA Script를 따른다.
Typescript의 특징
• Typescript는 ES6의 스펙을 포함한다
Typescript의 위치
• Node.JS 설치후 npm 명령어를 이용하여 설치
– $ npm install -g typescript
– Compile : $ tsc test.ts
– Test : $ node test.js
• 설치후 Windows 에서 패스가 안잡히는 경우
– C:Program Files (x86)Microsoft
SDKsTypeScript1.7 디렉터리를 환경변수에 추가
Typescript 컴파일러 설치
Typescript 컴파일과 테스트
TS JS HTML
Tsc로 컴파일 JS 로딩
Typescript에서 Class 사용예
/src/typescript/ex3_class/test.ts
• TS파일에 클래스 정의
class Gorilla { foo: number; }
class chimpanzee { bar: string; }
class Primates {
constructor(foo: Gorilla, bar: chimpanzee) { }
}
let primates = new Primates(new Gorilla(), new chimpanzee()); // valid
var Gorilla = (function () {
function Gorilla() { }
return Gorilla;
})();
var chimpanzee = (function () {
function chimpanzee() { }
return chimpanzee;
})();
var Primates = (function () {
function Primates(foo, bar) { }
return Primates;
})();
var primates = new Primates(new Gorilla(), new chimpanzee()); // valid
Typescript에서 Class 사용예
/src/typescript/ex3_class/test.ts
• TSC에 의해 JS로 컴파일된 결과
Typescript에서 Interface 사용예
/src/typescript/ex4_interface/test.ts
interface Person {
firstName: string;
lastName: string;
}
function greeter(person: Person) {
return "Hello, " + person.firstName + " " + person.lastName;
}
var user = { firstName: "Happy", lastName: "Grammer" };
document.body.innerHTML = greeter(user);
• TS파일에 Interface 정의
Typescript에서 Interface 사용예
/src/typescript/ex4_interface/test.js
• TSC에 의해 JS로 컴파일된 결과
function greeter(person) {
return "Hello, " + person.firstName + " " + person.lastName;
}
var user = { firstName: "Happy", lastName: "Grammer" };
document.body.innerHTML = greeter(user);
THANK YOU
https://github.com/DaeguDevGroup/angular2-bootstrap

Más contenido relacionado

La actualidad más candente

Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기 철민 배
 
Angular js quick start
Angular js quick startAngular js quick start
Angular js quick start정기 김
 
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Jeado Ko
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기Han Jung Hyun
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Woojin Joe
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는Taegon Kim
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular jsJeado Ko
 
Web Components & Polymer
Web Components & PolymerWeb Components & Polymer
Web Components & PolymerJae Sung Park
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드NAVER D2
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기Jeado Ko
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기Gyutae Jo
 
Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기장현 한
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁WebFrameworks
 
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...탑크리에듀(구로디지털단지역3번출구 2분거리)
 

La actualidad más candente (20)

Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기
 
Angular js quick start
Angular js quick startAngular js quick start
Angular js quick start
 
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 
Web Components & Polymer
Web Components & PolymerWeb Components & Polymer
Web Components & Polymer
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
 
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
 

Similar a Angular2를 활용한 컴포넌트 중심의 개발

Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)양 한빛
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약Tae wook kang
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기hanbeom Park
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 

Similar a Angular2를 활용한 컴포넌트 중심의 개발 (20)

Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
okspring3x
okspring3xokspring3x
okspring3x
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
Angularcdk
AngularcdkAngularcdk
Angularcdk
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 

Más de Jin wook

자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개Jin wook
 
클린 아키텍처 재해석
클린 아키텍처 재해석클린 아키텍처 재해석
클린 아키텍처 재해석Jin wook
 
MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)Jin wook
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정Jin wook
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDJin wook
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) Jin wook
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개Jin wook
 
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용빅 데이터 개요 및 활용
빅 데이터 개요 및 활용Jin wook
 

Más de Jin wook (10)

자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개
 
클린 아키텍처 재해석
클린 아키텍처 재해석클린 아키텍처 재해석
클린 아키텍처 재해석
 
MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개
 
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용빅 데이터 개요 및 활용
빅 데이터 개요 및 활용
 

Angular2를 활용한 컴포넌트 중심의 개발

  • 1. component-based development using Angular2 Angular2를 활용한 컴포넌트 중심의 개발 160514 대구개발자그룹 정진욱
  • 2. • Google이 만든 open-source web application MV* framework • MEAN stack중 Frontend 파트에 해당 – MEAN = MongoDB + ExpressJS + AngularJS + Node.JS AngularJS?
  • 3. • 2014년 10월 – ngEurope conference에서 첫소개 • 2015년 4월 30일 (Alpha Version) • 2015년 12월 (Beta Version) – https://angular.io/ 에서 다운로드 받을 수 있게됨 • 2016년 5월 – 첫 release candidate가 되어 출시함 Angular2의 History
  • 4. • Angular 1의 주요 컨셉이 사라짐 – Deprecated : Controllers, Directive Definition Object, $scope, angular.module, jqLite • Angular 2는 쉽다. – Angular1의 주요 컨셉은 사라졌지만, 2는 Javascript Class 구축에만 집중할 수 있게 한다. • TypeScript를 이용한다. – JS의 상위집합업어 OOP 지원, 명확한 형정의 제공으 로 가독성의 장점, 프리컴파일이 필요 Angular2의 중요특징
  • 5. • 브라우저 지원 – 크롬, 파폭, 오페라, 사파리, IE11, Android, iOS 6+ (PC보다는, 모바일 앱을 위한 프레임워크) • 기타 눈여겨볼 특징 – Angular 1의 확장이 아닌, 2는 새로 만들었다. – Angular 2는 모바일을 고려하여 적은 대역폭으로 이 용할 수 있도록 하였다. – Angular 1에 비해 빠르다. (3~10배) Angular2의 중요특징
  • 6. Angular1 vs Angular2 Reference : http://teropa.info/blog/2015/10/18/refactoring-angular-apps-to-components.html
  • 7. • Component를 이용한 탬플릿과 서비스 로직 관리 Angular2의 아키텍쳐
  • 8. • Component 정의 – 기능 명세에 의한 개발 – 명세 따른 배포, 조립 가능한 독립 구성단위 – 컴포넌트는 인터페이스만을 통해서 접근 (예 : WSDL) • Component 중심개발의 특징 – 관심사분리의 개발 방법으로 컴포넌트간 연결이 느슨 하다(loosely coupled). – 컴포넌트 재활용에 초점을 맞춘다. 컴포넌트 중심의 개발
  • 9. • Front-End에서의 컴포넌트 – 커스텀 엘리먼트(HTML5)로 볼 수 있다 – Angular2에서 컴포넌트는 특정 Element를 의미한다. – 사용예 : <my-component></my-component> • Angular 1의 컴포넌트 – directives, controllers, Scope에 의해 구현 – 컴포넌트에 해당하는 directive는 Angular1의 구성요 소의 일부였다. Angular2의 컴포넌트
  • 10. • 컴포넌트 중심의 Angular2 – Angular2는 컴포넌트 중심으로 개발을 진행한다. – 컴포넌트는 Template과 Logic을 포함한다. – component는 하나의 독립적인 모듈결합을 가진다. – component는 다른 component나 service를 의존주입 받을 수 있다. Angular2의 컴포넌트
  • 11. Angular2를 활용한 컴포넌트 중심의 개발 Component Component-Based System Import {Component, .. } from ‘@angular/core’; Import {Http,Headers .. } from ‘@angular/http’;’ ... @Component({ selector: 'app' }) @Injectable() export class App{ constructor(http:Http){ ... } } Import {Component, .. } from ‘@angular/core’; Import {Http,Headers .. } from ‘@angular/http’;’ ... @Component({ selector: 'app' }) @Injectable() export class App{ constructor(http:Http){ ... } } Import {Component, .. } from ‘@angular/core’; ... @Component({ selector: 'app' }) export class App{ constructor(){ ... } } Component-Based Angular2 Application Angular2 Component
  • 12. Angular2의 컴포넌트 import {Component} from ‘@angular2/angular2' @Component({ selector: 'my-component', template: '<div>Hello my name is {{name}}. <button (click)=“sayHello()">Say Hello</button></div>' }) export class MyComponent { constructor() { this.name = 'Programmer' } sayHello () { console.log('My name is', this.name) } } • Angular2의 컴포넌트 정의
  • 13. • 아키텍쳐의 주요 구성단위는 다음과 같다. – Module , Component, Template – Metadata, Data Binding, Directive – Service, Dependency Injection Angular2의 주요 구성단위
  • 14. • Angular는 많은 모듈로 이루어져있다. • Module은 다른 모듈에 의해 Import 될 수 있다. – Import시 핵심모듈은 ‘@’을 붙인다. • @angular/core (angular 핵심모듈) • @angular/common, @angular/router, and @angular/http ... • Module은 export할때 여러 자료형을 가진다. – Classes, function, values 1. Module
  • 15. • 핵심모듈 Import – import { Component } from '@angular/core'; • RC 버전이후에 반영 • 사용자 정의 모듈 Import – import { AppComponent } from './app.component'; 1. Module
  • 16. • 컴포넌트는 함수를 통해 View를 바인딩 컨트롤 2. Component import {Component} from 'angular2/core'; @Component({ selector: 'my-app', template: ‘...’ }) export class AppComponent { name =''; district = ['namgu', 'bukgu', 'seogu', 'suseonggu']; constructor() { this.name = 'daegu' } sayCityName() { alert('Our city name is '+this.name); } } Module =AppComponent Metadata To the Class
  • 17. • Component가 Render하여 생성된다. 3. Template <h2>Hero List</h2> <p><i>Pick a hero from the list</i></p> <div *ngFor="let hero of heroes" (click)="selectHero(hero)"> {{hero.name}} </div> <hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>
  • 18. • Angular가 Class를 어떻게 처리해야 할지를 정의 4. Metadata @Component({ selector: 'hero-list', templateUrl: 'app/hero-list.component.html', directives: [HeroDetailComponent], providers: [HeroService] }) export class HeroesComponent { ... }
  • 19. 5. Data Binding • Component의 탬플릿은 모듈내 function에 의해 제어되고, Two Way Binding된 변수(model)를 통 해 rendering 된다. <div>{{hero.name}}</div> <hero-detail [hero]="selectedHero"></hero-detail> <div (click)="selectHero(hero)"></div>
  • 20. 5. Data Binding • Two way binding – ngModel directive를 이용하여 모델은 Element에 연 결되고, 모듈이 이를 제어한다. <input [(ngModel)]="hero.name">
  • 21. 6. Directive • Directive를 통해 Template은 동적으로 변경됨 – Angular에서 제공하는 대표적인 Directive • ngFor는 list에 대한 item을 출력 • ngModel directive는 two-way binding을 함 • ngIf는 component의 포함여부를 결정 <div *ngFor="let hero of heroes"></div> <hero-detail *ngIf="selectedHero"></hero-detail>
  • 22. 6. Directive • 컴포넌트에서 사용자 Directive를 Import가능 import { Directive, ElementRef, Input } from '@angular/core'; @Directive({ selector: '[myHighlight]' }) export class HighlightDirective { constructor(el: ElementRef) { el.nativeElement.style.backgroundColor = 'yellow'; } } import { Component } from '@angular/core'; import { HighlightDirective } from './highlight.directive'; @Component({ selector: 'my-app', templateUrl: 'app/app.component.html', directives: [HighlightDirective] }) export class AppComponent { } directive definition Using directive
  • 23. • Template에서 attribute directive는 [Directive 명]=“string literals” 형태로 사용 6. Directive <p [myHighlight]="color" [defaultColor]="'violet'"> Highlight me too! </p>
  • 24. import { Injectable } from '@angular/core'; import { HEROES } from './mock-heroes'; @Injectable() //서비스 클래스에 추가해야 하는 Injectable Decorator export class HeroService { getHeroes() { return HEROES; } } 7. Service • 재사용이 빈번한 기능을 서비스로 정의함 import { Hero } from './hero'; export var HEROES: Hero[] = [ {"id": 11, "name": "Mr. Nice"}, {"id": 12, "name": "Narco"}, {"id": 13, "name": "Bombasto"}, {"id": 14, "name": "Celeritas"}, {"id": 15, "name": "Magneta"}, {"id": 16, "name": "RubberMan"}, {"id": 17, "name": "Dynama"}, {"id": 18, "name": "Dr IQ"}, {"id": 19, "name": "Magma"}, {"id": 20, "name": "Tornado"} ]; Heroservice.ts Return the mock hero mock-heroes.ts
  • 25. • 서비스가 의존성을 가지는 경우 constructor injection pattern을 이용해 주입받는다. 7. Service import { Injectable } from '@angular/core'; import { Hero } from './hero'; import { HEROES } from './mock-heroes'; import { Logger } from '../logger.service'; @Injectable() export class HeroService { constructor(private logger: Logger) { } getHeroes() { this.logger.log('Getting heroes ...') return HEROES; } }
  • 26. • Construct의 parameter를 통한 서비스 주입 8. Dependency Injection import { Component } from '@angular/core'; import { Hero } from './hero'; import { HeroService } from './hero.service'; @Component({ selector: 'hero-list', template: `<div *ngFor="let hero of heroes">{{hero.id}} - {{hero.name}} </div>`, }) export class HeroListComponent { heroes: Hero[]; constructor(heroService: HeroService) { this.heroes = heroService.getHeroes(); } } With D.I
  • 27. • Constructor 주입 미사용시 변수에 직접할당 8. Dependency Injection import { Component } from '@angular/core'; import { HEROES } from './mock-heroes'; @Component({ selector: 'hero-list', template: ` <div *ngFor="let hero of heroes"> {{hero.id}} - {{hero.name}} </div> `, }) export class HeroListComponent { heroes = HEROES; } Without D. I.
  • 28. • Typescript는 JS의 상위집합(superset) 언어 – ES2016+ 특징을 가진다. - Typescript = ES6 + TYpes + Annotaions - Generics나 Lambdas를 이용할 수 있다. • Javascript의 결점 보완 – OOP(상속, 인터페이스 등) 지원 – Primitive Type 지원 (num, string, boolean..) 으로 가 독성의 장점 Typescript의 특징
  • 29. • 프리컴파일 언어 – coffescript, atscript, typescript • Javascript의 미래버전인 Ecma Script 사용 – ECMA Script는 Ecma International의 기술규격에 정 의된 스크립트 언어 – Javascript는 ECMA Script를 따른다. Typescript의 특징
  • 30. • Typescript는 ES6의 스펙을 포함한다 Typescript의 위치
  • 31. • Node.JS 설치후 npm 명령어를 이용하여 설치 – $ npm install -g typescript – Compile : $ tsc test.ts – Test : $ node test.js • 설치후 Windows 에서 패스가 안잡히는 경우 – C:Program Files (x86)Microsoft SDKsTypeScript1.7 디렉터리를 환경변수에 추가 Typescript 컴파일러 설치
  • 32. Typescript 컴파일과 테스트 TS JS HTML Tsc로 컴파일 JS 로딩
  • 33. Typescript에서 Class 사용예 /src/typescript/ex3_class/test.ts • TS파일에 클래스 정의 class Gorilla { foo: number; } class chimpanzee { bar: string; } class Primates { constructor(foo: Gorilla, bar: chimpanzee) { } } let primates = new Primates(new Gorilla(), new chimpanzee()); // valid
  • 34. var Gorilla = (function () { function Gorilla() { } return Gorilla; })(); var chimpanzee = (function () { function chimpanzee() { } return chimpanzee; })(); var Primates = (function () { function Primates(foo, bar) { } return Primates; })(); var primates = new Primates(new Gorilla(), new chimpanzee()); // valid Typescript에서 Class 사용예 /src/typescript/ex3_class/test.ts • TSC에 의해 JS로 컴파일된 결과
  • 35. Typescript에서 Interface 사용예 /src/typescript/ex4_interface/test.ts interface Person { firstName: string; lastName: string; } function greeter(person: Person) { return "Hello, " + person.firstName + " " + person.lastName; } var user = { firstName: "Happy", lastName: "Grammer" }; document.body.innerHTML = greeter(user); • TS파일에 Interface 정의
  • 36. Typescript에서 Interface 사용예 /src/typescript/ex4_interface/test.js • TSC에 의해 JS로 컴파일된 결과 function greeter(person) { return "Hello, " + person.firstName + " " + person.lastName; } var user = { firstName: "Happy", lastName: "Grammer" }; document.body.innerHTML = greeter(user);

Notas del editor

  1. WSDL은 서비스를 기술하는 언어이다. 주요 구성요는 다음과 같다. - Types - Operations Binding WSDL의 구조는 다음과 같다. <definitions> <types> definition of types........ </types> <message> definition of a message.... </message> <portType> <operation> definition of a operation....... </operation> </portType> <binding> definition of a binding.... </binding> <service> definition of a service.... </service> </definitions>
  2. 모듈은 상위개념이며, 컴포넌트를 모듈로 보아도 무방하다.
  3. https://angular.io/docs/ts/latest/guide/architecture.html#!#template
  4. https://angular.io/docs/ts/latest/guide/architecture.html#!#metadata 클래스로 표현할 수 있는 대상은 컴포넌트, Directive, Service가 된다.
  5. https://angular.io/docs/ts/latest/guide/architecture.html#!#data-binding
  6. https://angular.io/docs/ts/latest/guide/attribute-directives.html
  7. https://angular.io/docs/ts/latest/guide/architecture.html#!#service https://angular.io/docs/ts/latest/guide/dependency-injection.html
  8. https://angular.io/docs/ts/latest/guide/dependency-injection.html
  9. https://angular.io/docs/ts/latest/guide/dependency-injection.html
  10. https://angular.io/docs/ts/latest/guide/dependency-injection.html