SlideShare uma empresa Scribd logo
1 de 19
Jeong Jin Wook
2014. 10. 25.
 2009년 구글 직원인 Miskio Heavery의 개인 프로젝트에 출발. 초기에 아이
디어에 대한 반응이 좋아서 현재는 구글이 공식 지원하는 프로젝트가 됨
Angular의 역사
Angular의 인기
 자바스크립트 코드량 감소
– MVC 제공
– 양방향 바인딩 제공
 재사용 가능한 UI 컴포넌트 작성가능
– Directive를 이용한 HTML 태그 확장
1) 예 : <map>, <graph>
 의존관계주입
 JQuery 지원
 구글의 지원
Angular.JS를 사용할 만한 이유
 SPA 형태의 웹 애플리케이션
– Angular에서는 라우팅이라는 것을 이용함
– CRUD에 해당하는 서버 로직을 SPA의 라우터를 받는 Controller로 이관
Angular의 철학
Angular의 동작방식
 $scope
– 변수이름 충돌 방지
– 계층적인 메모리 관리
– $rootScope의 자식
 Controller
– Controller는 스코프 객체를 초기화하는 역할을 함
– $scope <객체>를 이용하여 모델 값을 지정하거나, 함수를 추가할 수 있음
 Model
– $scope의 개체의 프로퍼티와 함수는 모델로 볼 수 있음
Angular의 중요개념
Angular의 TODO 표시예
<html ng-app>
<head>
<meta charset="utf-8">
<title>Hello World, AngularJS</title>
<script>
function TodoCtrl($scope) {
$scope.todos = [
{text:'learn angular', done:true},
{text:'Hello!', done:false},
{text:'build an angular app', done:false}];
$scope.remaining = function() {
var count = 0;
angular.forEach($scope.todos, function(todo) {
count += todo.done ? 0 : 1;
});
return count;
};
}
</script>
<body>
<h2>Todo</h2>
<div ng-controller="TodoCtrl">
<span>남은선택개수 ({{remaining()}}/{{todos.length}})</span>
</div>
</body>
</html>
 Angular는 Directive의 Dom 조작을 제외하고 선언형 프로그래밍을 권장함.
– 선언형 프로그래밍의 예 : 탬플릿
 선언형 프로그래밍과 명령형 프로그래밍의 차이
– 명령형 - ‘어떤 방법’으로 할 것인지에 대한 중점
1) JAVA, C++
– 선언형 - ‘무엇’을 할지에 대한에 대한 관심.
1) 가장 이상적인 선언형 언어의 예 : HTML (순서도 없으며, 방법도 없다)
Angular의 개발방식
Front-End의 View(Dom) 개발
Wireframe
App
Template (partial page)
Controller 관점
Angular로 구성하는 Front-End 중심의 아키텍쳐
WEB
(Angular의 SPA)
정적
웹 서버
RESTful
경량서버
HTTP
HTTP, JSON
Application
Server
NOSQL
DB
…
클라이언트의 역할
Logic ( View 생성관련)
서버의 역할
인증과 권한부여, 유효성검증, 데이터 저장과 동기화
 클로저
– 외부함수(포함하고 있는)의 변수에 접근할 수 있는 내부 함수를 일컫는 말.
– Non 블로킹 아키텍쳐의 핵심개념으로 사용됨
Angular를 위한 핵심적인 Javascript 문법
$(function() {
var selections = [];
$(".niners").click(function() { // 이 클로저는 selections 변수에 접근합니다.
selections.push(…); // 외부 함수의 selections 변수 갱신
});
});
var sequencer = function() {
var s = 0;
return function() { return ++s; }
};
Var seq=sequencer();
seq(); //1
Jquery
에서의
클로저
 변수선언
– var a=10,b=20, …과 같은 체이닝 형식의 초기화 가능, 초기값이 없다면 undefined가 됨.
 블록유효 범위가 없다.
Angular를 위한 핵심적인 Javascript 문법
{
var count = 10;
}
console.log(count); // 10, 블록이 닫히더라도 접근가능
 함수에 대한 반환을 가지는 객체생성을 통한 내부함수 호출
Angular를 위한 핵심적인 Javascript 문법
function car(color){
console.log('1:'+color);
function sonata(){ //직관적이지 않다.
console.log('2:'+'sonata');
}
return sonata;
}
var mycar=new car('red');
mycar();//내부함수 sonata를 호출한다
 익명함수에 대한 반환을 가지는 객체생성
– 객체안에서 익명함수를 반환할 수 있다.
Angular를 위한 핵심적인 Javascript 문법
var mycar=new car('red');
mycar();//내부함수 sonata를 호출한다
//alert(mycar);//함수 자체를 출력한다.
function bus(){
return function(){
console.log('3:'+'bus');
};
}
var imbus=bus();
imbus();
 모듈패턴
– Private을 구현
Angular를 위한 핵심적인 Javascript 문법
var animal = (function() {
var privateCounter = 0;
function sound(val) {
console.log('4:'+val);
}
return {
cat: function() {
sound('5:'+'cat');
return 'return cat';
}
}
})();
console.log('6:'+animal.cat());
 생성자 함수를 통한 new 생성
– 성능 및 메모리 낭비를 방지하는 객체생성 방법 (Literal 형태)
Angular를 위한 핵심적인 Javascript 문법
function MyObject(name, message) {
this.name = name.toString();
this.message = message.toString();
this.getName = function() {
return this.name;
};
this.getMessage = function() {
return this.message;
};
}
function MyObject(name, message) {
this.name = name.toString();
this.message = message.toString();
}
MyObject.prototype = {
getName: function() {
return this.name;
},
getMessage: function() {
return this.message;
}
};
 Prototype 방식의 객체 생성
Angular를 위한 핵심적인 Javascript 문법
function MyObject2(name, message) {
this.name = name.toString();
this.message = message.toString();
}
MyObject2.prototype.getName = function() {
return this.name;
};
MyObject2.prototype.getMessage = function() {
return this.message;
};
var m=new MyObject('MyObject','message');
console.log('61:'+m.getName());
var m2=new MyObject2('MyObject2','message');
console.log('62:'+m2.getName());
Angular 기본지시자

Mais conteúdo relacionado

Mais procurados

[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
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
Angular js quick start
Angular js quick startAngular js quick start
Angular js quick start정기 김
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기Kenneth Ceyer
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사Rjs Ryu
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Jin wook
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.병대 손
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Jay Park
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드NAVER D2
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수NAVER D2
 
Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Kenneth Ceyer
 
Html5 web workers
Html5 web workersHtml5 web workers
Html5 web workersWoo Jin Kim
 

Mais procurados (20)

[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Angular js quick start
Angular js quick startAngular js quick start
Angular js quick start
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018
 
Html5 web workers
Html5 web workersHtml5 web workers
Html5 web workers
 

Destaque

MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)Jin wook
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정Jin wook
 
XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개Jung soo Ahn
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN정호 전
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDJin wook
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개Jin wook
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) Jin wook
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록라한사 아
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 

Destaque (18)

MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)
 
InfiniFlux DURATION
InfiniFlux DURATIONInfiniFlux DURATION
InfiniFlux DURATION
 
InfiniFlux with_php
InfiniFlux with_phpInfiniFlux with_php
InfiniFlux with_php
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
 
InfiniFlux 성능 지표
InfiniFlux 성능 지표InfiniFlux 성능 지표
InfiniFlux 성능 지표
 
XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
 
InfiniFlux vs RDBMS
InfiniFlux vs RDBMSInfiniFlux vs RDBMS
InfiniFlux vs RDBMS
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
 
Infiniflux introduction
Infiniflux introductionInfiniflux introduction
Infiniflux introduction
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
InfiniFlux IP_Type
InfiniFlux IP_TypeInfiniFlux IP_Type
InfiniFlux IP_Type
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개
 
Angular2 NgModule
Angular2   NgModuleAngular2   NgModule
Angular2 NgModule
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 

Semelhante a AngularJS의 개발방식에 대하여

Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamentalJeongHun Byeon
 
Angular js 의존관계 주입과 서비스
Angular js 의존관계 주입과 서비스Angular js 의존관계 주입과 서비스
Angular js 의존관계 주입과 서비스Tae Ho Kang
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.jsJinKwon Lee
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With GroovyTommy C. Kang
 
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
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)Chang-Hwan Han
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게Sungju Jin
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Androidtaeinkim6
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013명신 김
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 

Semelhante a AngularJS의 개발방식에 대하여 (20)

Design patterns
Design patternsDesign patterns
Design patterns
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamental
 
Angular js 의존관계 주입과 서비스
Angular js 의존관계 주입과 서비스Angular js 의존관계 주입과 서비스
Angular js 의존관계 주입과 서비스
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Eclipse RCP 1/2
Eclipse RCP 1/2Eclipse RCP 1/2
Eclipse RCP 1/2
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 

AngularJS의 개발방식에 대하여

  • 2.  2009년 구글 직원인 Miskio Heavery의 개인 프로젝트에 출발. 초기에 아이 디어에 대한 반응이 좋아서 현재는 구글이 공식 지원하는 프로젝트가 됨 Angular의 역사
  • 4.  자바스크립트 코드량 감소 – MVC 제공 – 양방향 바인딩 제공  재사용 가능한 UI 컴포넌트 작성가능 – Directive를 이용한 HTML 태그 확장 1) 예 : <map>, <graph>  의존관계주입  JQuery 지원  구글의 지원 Angular.JS를 사용할 만한 이유
  • 5.  SPA 형태의 웹 애플리케이션 – Angular에서는 라우팅이라는 것을 이용함 – CRUD에 해당하는 서버 로직을 SPA의 라우터를 받는 Controller로 이관 Angular의 철학
  • 7.  $scope – 변수이름 충돌 방지 – 계층적인 메모리 관리 – $rootScope의 자식  Controller – Controller는 스코프 객체를 초기화하는 역할을 함 – $scope <객체>를 이용하여 모델 값을 지정하거나, 함수를 추가할 수 있음  Model – $scope의 개체의 프로퍼티와 함수는 모델로 볼 수 있음 Angular의 중요개념
  • 8. Angular의 TODO 표시예 <html ng-app> <head> <meta charset="utf-8"> <title>Hello World, AngularJS</title> <script> function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'Hello!', done:false}, {text:'build an angular app', done:false}]; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; } </script> <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>남은선택개수 ({{remaining()}}/{{todos.length}})</span> </div> </body> </html>
  • 9.  Angular는 Directive의 Dom 조작을 제외하고 선언형 프로그래밍을 권장함. – 선언형 프로그래밍의 예 : 탬플릿  선언형 프로그래밍과 명령형 프로그래밍의 차이 – 명령형 - ‘어떤 방법’으로 할 것인지에 대한 중점 1) JAVA, C++ – 선언형 - ‘무엇’을 할지에 대한에 대한 관심. 1) 가장 이상적인 선언형 언어의 예 : HTML (순서도 없으며, 방법도 없다) Angular의 개발방식
  • 10. Front-End의 View(Dom) 개발 Wireframe App Template (partial page) Controller 관점
  • 11. Angular로 구성하는 Front-End 중심의 아키텍쳐 WEB (Angular의 SPA) 정적 웹 서버 RESTful 경량서버 HTTP HTTP, JSON Application Server NOSQL DB … 클라이언트의 역할 Logic ( View 생성관련) 서버의 역할 인증과 권한부여, 유효성검증, 데이터 저장과 동기화
  • 12.  클로저 – 외부함수(포함하고 있는)의 변수에 접근할 수 있는 내부 함수를 일컫는 말. – Non 블로킹 아키텍쳐의 핵심개념으로 사용됨 Angular를 위한 핵심적인 Javascript 문법 $(function() { var selections = []; $(".niners").click(function() { // 이 클로저는 selections 변수에 접근합니다. selections.push(…); // 외부 함수의 selections 변수 갱신 }); }); var sequencer = function() { var s = 0; return function() { return ++s; } }; Var seq=sequencer(); seq(); //1 Jquery 에서의 클로저
  • 13.  변수선언 – var a=10,b=20, …과 같은 체이닝 형식의 초기화 가능, 초기값이 없다면 undefined가 됨.  블록유효 범위가 없다. Angular를 위한 핵심적인 Javascript 문법 { var count = 10; } console.log(count); // 10, 블록이 닫히더라도 접근가능
  • 14.  함수에 대한 반환을 가지는 객체생성을 통한 내부함수 호출 Angular를 위한 핵심적인 Javascript 문법 function car(color){ console.log('1:'+color); function sonata(){ //직관적이지 않다. console.log('2:'+'sonata'); } return sonata; } var mycar=new car('red'); mycar();//내부함수 sonata를 호출한다
  • 15.  익명함수에 대한 반환을 가지는 객체생성 – 객체안에서 익명함수를 반환할 수 있다. Angular를 위한 핵심적인 Javascript 문법 var mycar=new car('red'); mycar();//내부함수 sonata를 호출한다 //alert(mycar);//함수 자체를 출력한다. function bus(){ return function(){ console.log('3:'+'bus'); }; } var imbus=bus(); imbus();
  • 16.  모듈패턴 – Private을 구현 Angular를 위한 핵심적인 Javascript 문법 var animal = (function() { var privateCounter = 0; function sound(val) { console.log('4:'+val); } return { cat: function() { sound('5:'+'cat'); return 'return cat'; } } })(); console.log('6:'+animal.cat());
  • 17.  생성자 함수를 통한 new 생성 – 성능 및 메모리 낭비를 방지하는 객체생성 방법 (Literal 형태) Angular를 위한 핵심적인 Javascript 문법 function MyObject(name, message) { this.name = name.toString(); this.message = message.toString(); this.getName = function() { return this.name; }; this.getMessage = function() { return this.message; }; } function MyObject(name, message) { this.name = name.toString(); this.message = message.toString(); } MyObject.prototype = { getName: function() { return this.name; }, getMessage: function() { return this.message; } };
  • 18.  Prototype 방식의 객체 생성 Angular를 위한 핵심적인 Javascript 문법 function MyObject2(name, message) { this.name = name.toString(); this.message = message.toString(); } MyObject2.prototype.getName = function() { return this.name; }; MyObject2.prototype.getMessage = function() { return this.message; }; var m=new MyObject('MyObject','message'); console.log('61:'+m.getName()); var m2=new MyObject2('MyObject2','message'); console.log('62:'+m2.getName());