javascript 객체 지향 프로그래밍
생코 수업 Link : https://opentutorials.org/module/4047/24604
객체의 사용 사례 - JavaScript 객체 지향 프로그래밍
수업소개 객체를 실제로 활용하는 사례를 살펴보면서, 객체란 서로 연관된 변수와 함수를 그룹핑하고 이름을 붙인 것이라는 말의 의미를 음미해봅시다. 강의1 이미 우리가 객체를 사용해왔음을 확인해봄으로서 객체가 멀리 있는 것이 아니라는 것을 느껴보는 영상입니다. 코드 built-in.js (변경사항) console.log("Math.PI", Math.PI); console.log("Math.random()", Math.random()); console.lo
opentutorials.org
02. 객체의 사용 사례
2-1. 사례 _Math.
우리는 이미 이해하기 전에 익숙하게 사용하고 있다. 가장 대표적인 객체가 MATH 객체이다.
built_in.js )
console.log("Math.PI : ", Math.PI);
console.log("Math.random() : ", Math.random());
console.log("Math.floor(3.9) : ", Math.floor(3.9));
실행 결과 )
2-2. 직접 만들어보기 _MyMath.
객체(MyMath)라는 것은 같은 취지의 연관된 변수(PI), 함수(random, floor)들을 MyMath라는 하나의 객체로 그룹핑해서 그 요소들에 이름을 붙이는 것이다.
built_in.js )
// random()는 함수
// Math.random()에서의 random()는 메소드
var MyMath={
PI:Math.PI,
random:function(){
return Math.random();
},
floor:function(val){
return Math.floor(val);
}
}
console.log("MyMath.PI : ", MyMath.PI);
console.log("MyMath.random : ", MyMath.random);
console.log("MyMath.floor : ", MyMath.floor(3.9));
실행 결과 )
03. this
자기 자신을 가리키는 대명사 this
this.js)
//#this 사용 전 1
var kimA ={
name:"kimA",
first:10,
second:20,
sum:function(f,s){
return f+s;
}
}
console.log(kimA.name, " : ", kimA.sum(kimA.first,kimA.second));
// -> 내부에 정보가 있음에도 매번 접근을해서 기입을 해야한다
//#this 사용 전 2
var kimB ={
name:"kimB",
first:10,
second:20,
sum:function(){
return kimB.first+kimB.second;
// -> 내부의 정보를 바로 활용하고 있지만, 객체의 이름이 변경될 때마다 수정이 필요하다
}
}
console.log(kimB.name, " : ",kimB.sum());
//#this 사용 후
var kimC ={
name:"kimC",
first:10,
second:20,
sum:function(){
return this.first+this.second;
// -> 내부의 정보를 바로 활용하고 있지만, 객체의 이름이 변경되더라도 값에 영향을 주지 않는다.
}
}
console.log(kimC.name, " : ",kimC.sum())
실행 결과)
04. 객체 공장
4-1. 예제를 통해 앞으로 배워야 할 새로운 학습 목표 발견하기
objectFactory.js) - 기본 예제
var kim ={
name:"kim",
first:10,
second:20,
sum:function(){
return this.first+this.second;
}
}
var lee ={
name:"lee",
first:10,
second:20,
sum:function(){
return this.first+this.second;
}
}
console.log(kim.name, " 's sum : ",kim.sum())
console.log(lee.name, " 's sum : ",lee.sum())
objectFactory.js) - 가내수공업이 아닌 양산의 형태로 객체를 생성, 관리할 수 있는 방법에 대한 필요성 인식하기 예제
kim의 객체 내부의 요소(변수, 함수 등)가 늘어 나는 경우 lee... 와 같이 같은 취지의 객체들의 요소들 모두도 수정해야 하는 상황 발생
var kim ={
name:"kim",
first:10,
second:20,
third:30, // 새로 추가된 변수
sum:function(){ // 새로 추가된 변수로 인해 변경된 함수
return this.first+this.second+this.third;
}
}
var lee ={
name:"lee",
first:10,
second:10,
third:10, // * kim에 맞춰 추가한 변수
sum:function(){ // * 새로 추가된 변수로 인해 변경된 함수
return this.first+this.second+this.third;
}
}
console.log(kim.name, " 's sum : ",kim.sum())
console.log(lee.name, " 's sum : ",lee.sum())
-> 우리에겐 공장을 만들 수 있는 초 능력이 필요하다
4-2. 이미 만들어져 있는 공장 견학 가기 (내장 코드)
objectFactory.js) - 이미 만들어져 있는 공장을 사용해 보기 : new Date
//(위의 코드 뒤로 이어서)
// new Date로 새로운 객체 생성해서 d1에 담는다.
var d1 = new Date('2019-4-10');
// Date 객체의 구조, 설계도는 알수는 없지만 d1을 통해 Date의 상태, 값 등을 활용할 수 있다.
// 위의 가내수공업 방식의 경우에는 객체의 요소와 구조, 설계도 모두가 노출된다.
console.log("getDate : ",d1.getDate());
console.log("getFullYear : ",d1.getFullYear())
console.log("getMonth : ", d1.getMonth()+1); //Month의 경우, 0부터 카운팅하기 때문에 +1
실행 결과)
4-3. 직접 공장 만들기(시범/연습용)
objectFactory.js) - 새로운 공장을 짓고 생산 결과 확인하기
//Date가 어떻게 생겼는지 확인해 보기
console.log("Date : ", Date);
// 결과 -> function Date() { [native code] }
// Date는 함수 형태로 만들어진 내장 코드이다.
function Person(){
this.name="kim",
this.first=10,
this.second=20,
this.third=30, // 새로 추가된 변수
this.sum=function(){ // 새로 추가된 변수로 인해 변경된 함수
return this.first+this.second+this.third;
}
}
console.log("Person : ", Person); // 요소를 그대로 출력
console.log("Person() : ", Person()); // 그냥 함수가 호출됨
console.log("new Person() : ", new Person()); // 생성자 함수, new를 통해 객체를 생성하는 생성자의 역할 수행
실행 결과)
4-4. 직접 공장 만들기(실전용 1)
objectFactory.js) - 김 씨와 이 씨 객체에 적용하기
function Person(){
this.name="kim",
this.first=10,
this.second=20,
this.third=30, // 새로 추가된 변수
this.sum=function(){ // 새로 추가된 변수로 인해 변경된 함수
return this.first+this.second+this.third;
}
}
var kim = new Person();
kim.name="kim";
kim.first=10;
kim.second=20;
kim.third=30;
var lee = new Person();
lee.name="lee";
lee.first=10;
lee.second=10;
lee.third=10;
console.log(kim.name, " 's sum : ",kim.sum());
console.log(lee.name, " 's sum : ",lee.sum());
실행 결과)
4-5. 직접 공장 만들기(실전용 2)
objectFactory.js) - 김 씨와 이 씨 객체에 조금 더 세련되게 적용하기
function Person(name,first,second,third){
this.name=name,
this.first=first,
this.second=second,
this.third=third, // 새로 추가된 변수
this.sum=function(){ // 새로 추가된 변수로 인해 변경된 함수
return this.first+this.second+this.third;
}
}
var kim = new Person("kim",10,20,30);
var lee = new Person("lee",10,10,10);
console.log(kim.name, " 's sum : ",kim.sum());
console.log(lee.name, " 's sum : ",lee.sum());
실행 결과)
아직 끝난 건 아니지만.. 이번 실습 epilogue,
음.. 객체를 생성하고 다루는 방식이.. java와 거의 같다.. 개인적으로는 디테일 측면에서는 더 유연? 한 거 같다.
태어날 때부터 객체였던 JAVA, 성장하면서 객체로 변모하고 있는 javascript.. 마치 현실 세계의 금수저와 흑수저로 비유될 수 있지 않을까 한다. JAVA로 시작해서.. 변화해가는 PHP와 javascript를 배우며 새삼, 'PHP와 javascript 같은 (tone and manner를 지닌) 사람이 되자'는 생각을 해본다..
'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글
[생활코딩 따라가기] javascript 객체 지향 프로그래밍_06~08 (0) | 2019.04.30 |
---|---|
[생활코딩 따라가기] javascript 객체 지향 프로그래밍_05. prototype (0) | 2019.04.30 |
[생활코딩 따라가기] javascript 객체 지향 프로그래밍_01배열과 객체 (0) | 2019.04.23 |
비쥬얼 스튜디오 코드 (0) | 2019.04.23 |
자가동력미션 01. 집에 있는 책들을 데이터 베이스화 하기 3. 새로운 계획, 구현, 배포 그리고 개선 (0) | 2019.03.20 |
댓글