SlideShare a Scribd company logo
1 of 10
2016 자바카페 스파르탄 스터디
INSIDE Java Script 6
JAVACAFE
박진현
2016 자바카페 스파르탄 스터디들어가기 앞서..
 본 슬라이드는 2016 자바카페 스파르탄 스터디를 위해
제작되었습니다.
 본 슬라이드의 대부분의 내용은
인사이드 자바스크립트
(2014 송형주, 고현준) 의
내용을 참고하였습니다.
2016 자바카페 스파르탄 스터디목 차
 객체지향 프로그래밍
 클래스, 생성자, 메서드
 상속
 캡슐화
 함수형 프로그래밍
2016 자바카페 스파르탄 스터디클래스, 생성자, 메소드
 함수로 구현 가능한것
 클래스
 생성자
 메소드
 우측코드의 문제점은?
2016 자바카페 스파르탄 스터디클래스, 생성자, 메소드
 공통으로 쓸수있는걸 구지 객체마다 가짐
 getName, setName
 메소드를 정의할떈 프로토타입에 정의후 ,
new로 생성한 객체에서 접근하는게 좋음
2016 자바카페 스파르탄 스터디상속
 클래스를 기반으로 하는 상속 불가
 프로토타입 상속
 클래스 기반 상속 흉내내기
2016 자바카페 스파르탄 스터디상속
 프로토타입 상속
 프토로타입 체이닝을 이용한 상속(갓글라스 클락포드..)
 인자로 들어온 객체를 부모로하는 객체를 반환
 ECMA5에서는 Object.create() 로 구현되있음
 생성자 함수 X
 클래스 인스턴스 X
 부모객체 참조만으로..
 자식이 이를 확장하려면?
 s.setAge = function(…)
 영롱하지 못하다(코드가 더럽다)
var p = {
name : "pika",
getName : function(){
return this.name;
},
setName : function(val){
this.name = val;
}
}
function create_object(o){
function F() {}
F.prototype = o;
return new F();
}
var s = create_object(p);
s.setName("Hello");
console.log(s.getName());
2016 자바카페 스파르탄 스터디얕은? 깊은?
 얕은 복사(shallow copy)
 원본 객체에 값을 복사하지 않고 계속 참조함(배열,함수 객체등)
 깊은 복사(deep copy)
 값을 복제해서 가지고 감(복제값이 바뀌어도 원본에 영향 없음)
 빈 객체를 만들어서 재귀호출
 단! 함수객체는 그대로 얕은복사를 진행
 jQuery.extend 참조..(책이 잘나와있음) function shallowCopy(oldObj) {
var newObj = {};
for(var i in oldObj) {
if(oldObj.hasOwnProperty(i)) {
newObj[i] = oldObj[i];
}
}
return newObj;
}
2016 자바카페 스파르탄 스터디클래스 기반 상속
 사실 프로토타입
상속과 비슷..
 코드로 살펴보자!
Function.prototype.method = function (name,func) {
if(!this.prototype[name]){
this.prototype[name] = func;
}
}
function Person(arg){
this.name = arg;
console.log("안녕 나는 사람이야..");
}
Person.method("setName",function(val){
this.name = val;
});
Person.method("getName",function(){
return this.name;
});
function F() {};
F.prototype = Person.prototype;
function Student(arg){
Person.apply(this,arguments);
console.log("안녕 나는 학생이야.")
}
Student.prototype = new F();
Student.prototype.constructor = Student;
Student.super = Person.prototype;
var me = new Student("봉수와");
console.log(me.getName());
dir(me);
var inherit = function(P, C){
var F = function(){};
return function (P, C){
F.prototype = P.prototype;
C.prototype = new F();
C.prototype.constructor = C;
C.super = P.prototype;
};
}();
2016 자바카페 스파르탄 스터디캡슐화
 기본적으로 private, public 등 접근 제어자는 미제공
 this객체의 프로퍼티는 외부에서도 접근 가능
 function 내의 var로 선언된건 외부에서 접근 불가
 하지만 ! 클로저로 접근 가능
 객체 반환
 프로토타입 활용 X
 함수 반환
 프로토타입 활용 가능
var Person = function(arg){
var name = arg;
return {
getName : function(){
return name;
},
setName : function(value){
name = value;
}
}
}
var m = new Person("헬로");
m.setName("피카츄");
console.log(m.getName());
var Person = function(arg){
var name = arg;
var F = function(){};
F.prototype = {
getName : function(){
return name;
},
setName : function(value){
name = value;
}
}
return F;
}();
var m = new Person("헬로");
m.setName("피카츄");
console.log(m.getName());

More Related Content

What's hot

헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리은숙 이
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2jangpd007
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스Lee Dong Wook
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js functionYoung-Beom Rhee
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flaskJiho Lee
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 ClojureEunmin Kim
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기NAVER D2
 

What's hot (20)

헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flask
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
Just java
Just javaJust java
Just java
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
3-1. css
3-1. css3-1. css
3-1. css
 
[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
 
Java lambda
Java lambdaJava lambda
Java lambda
 

Viewers also liked

Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013Jude Kim
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
[212] large scale backend service develpment
[212] large scale backend service develpment[212] large scale backend service develpment
[212] large scale backend service develpmentNAVER D2
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdockerJaehwa Park
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
Docker: the road ahead
Docker: the road aheadDocker: the road ahead
Docker: the road aheadshykes
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님NAVER D2
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법pyrasis
 
Papago/N2MT 개발이야기
Papago/N2MT 개발이야기Papago/N2MT 개발이야기
Papago/N2MT 개발이야기NAVER D2
 
Containerd - core container runtime component
Containerd - core container runtime component Containerd - core container runtime component
Containerd - core container runtime component Docker, Inc.
 
Why Docker
Why DockerWhy Docker
Why DockerdotCloud
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker, Inc.
 

Viewers also liked (15)

Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
[212] large scale backend service develpment
[212] large scale backend service develpment[212] large scale backend service develpment
[212] large scale backend service develpment
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdocker
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
Docker: the road ahead
Docker: the road aheadDocker: the road ahead
Docker: the road ahead
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
Papago/N2MT 개발이야기
Papago/N2MT 개발이야기Papago/N2MT 개발이야기
Papago/N2MT 개발이야기
 
Containerd - core container runtime component
Containerd - core container runtime component Containerd - core container runtime component
Containerd - core container runtime component
 
Why Docker
Why DockerWhy Docker
Why Docker
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 

Similar to 스파르탄Js in sidejs6

Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicknight1128
 
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기 [하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기 인권 김
 
비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기jeong seok yang
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담Javajigi Jaesung
 
Javascript Test Double Sinon.js
Javascript Test Double Sinon.jsJavascript Test Double Sinon.js
Javascript Test Double Sinon.js우영 주
 
Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Jeong-gyu Kim
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
Javascript prototype & inheritance
Javascript prototype & inheritanceJavascript prototype & inheritance
Javascript prototype & inheritance지수 윤
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With GroovyTommy C. Kang
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동Sungchul Park
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 

Similar to 스파르탄Js in sidejs6 (20)

[ES6] 6. Class
[ES6] 6. Class[ES6] 6. Class
[ES6] 6. Class
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
 
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
 
Javascript
JavascriptJavascript
Javascript
 
[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala
 
[하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기 [하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기
 
비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
 
Javascript Test Double Sinon.js
Javascript Test Double Sinon.jsJavascript Test Double Sinon.js
Javascript Test Double Sinon.js
 
Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
Java tutorial
Java tutorialJava tutorial
Java tutorial
 
Javascript prototype & inheritance
Javascript prototype & inheritanceJavascript prototype & inheritance
Javascript prototype & inheritance
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
javascript03
javascript03javascript03
javascript03
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 

스파르탄Js in sidejs6

  • 1. 2016 자바카페 스파르탄 스터디 INSIDE Java Script 6 JAVACAFE 박진현
  • 2. 2016 자바카페 스파르탄 스터디들어가기 앞서..  본 슬라이드는 2016 자바카페 스파르탄 스터디를 위해 제작되었습니다.  본 슬라이드의 대부분의 내용은 인사이드 자바스크립트 (2014 송형주, 고현준) 의 내용을 참고하였습니다.
  • 3. 2016 자바카페 스파르탄 스터디목 차  객체지향 프로그래밍  클래스, 생성자, 메서드  상속  캡슐화  함수형 프로그래밍
  • 4. 2016 자바카페 스파르탄 스터디클래스, 생성자, 메소드  함수로 구현 가능한것  클래스  생성자  메소드  우측코드의 문제점은?
  • 5. 2016 자바카페 스파르탄 스터디클래스, 생성자, 메소드  공통으로 쓸수있는걸 구지 객체마다 가짐  getName, setName  메소드를 정의할떈 프로토타입에 정의후 , new로 생성한 객체에서 접근하는게 좋음
  • 6. 2016 자바카페 스파르탄 스터디상속  클래스를 기반으로 하는 상속 불가  프로토타입 상속  클래스 기반 상속 흉내내기
  • 7. 2016 자바카페 스파르탄 스터디상속  프로토타입 상속  프토로타입 체이닝을 이용한 상속(갓글라스 클락포드..)  인자로 들어온 객체를 부모로하는 객체를 반환  ECMA5에서는 Object.create() 로 구현되있음  생성자 함수 X  클래스 인스턴스 X  부모객체 참조만으로..  자식이 이를 확장하려면?  s.setAge = function(…)  영롱하지 못하다(코드가 더럽다) var p = { name : "pika", getName : function(){ return this.name; }, setName : function(val){ this.name = val; } } function create_object(o){ function F() {} F.prototype = o; return new F(); } var s = create_object(p); s.setName("Hello"); console.log(s.getName());
  • 8. 2016 자바카페 스파르탄 스터디얕은? 깊은?  얕은 복사(shallow copy)  원본 객체에 값을 복사하지 않고 계속 참조함(배열,함수 객체등)  깊은 복사(deep copy)  값을 복제해서 가지고 감(복제값이 바뀌어도 원본에 영향 없음)  빈 객체를 만들어서 재귀호출  단! 함수객체는 그대로 얕은복사를 진행  jQuery.extend 참조..(책이 잘나와있음) function shallowCopy(oldObj) { var newObj = {}; for(var i in oldObj) { if(oldObj.hasOwnProperty(i)) { newObj[i] = oldObj[i]; } } return newObj; }
  • 9. 2016 자바카페 스파르탄 스터디클래스 기반 상속  사실 프로토타입 상속과 비슷..  코드로 살펴보자! Function.prototype.method = function (name,func) { if(!this.prototype[name]){ this.prototype[name] = func; } } function Person(arg){ this.name = arg; console.log("안녕 나는 사람이야.."); } Person.method("setName",function(val){ this.name = val; }); Person.method("getName",function(){ return this.name; }); function F() {}; F.prototype = Person.prototype; function Student(arg){ Person.apply(this,arguments); console.log("안녕 나는 학생이야.") } Student.prototype = new F(); Student.prototype.constructor = Student; Student.super = Person.prototype; var me = new Student("봉수와"); console.log(me.getName()); dir(me); var inherit = function(P, C){ var F = function(){}; return function (P, C){ F.prototype = P.prototype; C.prototype = new F(); C.prototype.constructor = C; C.super = P.prototype; }; }();
  • 10. 2016 자바카페 스파르탄 스터디캡슐화  기본적으로 private, public 등 접근 제어자는 미제공  this객체의 프로퍼티는 외부에서도 접근 가능  function 내의 var로 선언된건 외부에서 접근 불가  하지만 ! 클로저로 접근 가능  객체 반환  프로토타입 활용 X  함수 반환  프로토타입 활용 가능 var Person = function(arg){ var name = arg; return { getName : function(){ return name; }, setName : function(value){ name = value; } } } var m = new Person("헬로"); m.setName("피카츄"); console.log(m.getName()); var Person = function(arg){ var name = arg; var F = function(){}; F.prototype = { getName : function(){ return name; }, setName : function(value){ name = value; } } return F; }(); var m = new Person("헬로"); m.setName("피카츄"); console.log(m.getName());