๐ class
๊ด๋ จ ์๋ ํจ์์ ๋ณ์๋ฅผ ๋ฌถ์ด๋์ ๊ฒ
์์๊ณผ ๋ค์์ฑ์ผ์ด๋ ์ ์์
- fields
- methods
* data class
: methods๊ฐ ์๋ fields( data)๋ง ์๋ class
class | object |
- template ํ ํ๋ฆฟ - declare once - no data in (๋ฐ์ดํฐ๋ ์๊ณ ๋ง๋ค ์ ์๋ ํ) |
class ๋ฅผ ์ด์ฉํด์ ๋ง๋ ๊ฒ = ๊ฐ์ฒด |
javascript ์ class
javascript ๋ ๊ฐ์ฒด ์งํฅ์ธ์ด
object๊ฐ ์ํธ์์ฉํ๋ฉฐ ๋์๊ฐ๋ application
- ECMA Script 6๋ฒ์ ์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ
- ES6 ์์ ์๊น
- class๊ฐ ์๊ธฐ ์ ์๋ constructor function์ ์ด์ฉํด template์ ๋ง๋ค๊ณ ์ ์ํ์ฌ ์ฌ์ฉํ์๋ค.
- ๊ธฐ์กด์ ์กด์ฌํ๋ prototype-based ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ๋ฒ๋ง class๊ฐ ์ถ๊ฐ
๐ Constructor function (์์ฑ์ ํจ์) ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ
- ๊ฐ์ฒด ์์ฑ
- ๊ฐ์ฒด์ ์ด๊ธฐ ์ํ ์ธํ
function Person(name, first, second, third) {
this.name= name;
this.first = first
this.second = second;
}
var kim = new Person('kim',10,20);
๊ธฐ์กด์ javascript ๋ ์์ฑ์ํจ์(Person)์ new๋ก ๋ง๋ค์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
-> Person์ด๋ผ๋ ํจ์๋ ์์ฑ์๊ฐ ๋จ
๐ Class ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ
constructor()
๊ฐ์ฒด ์์ฑ ๋ ๋ ๊ฐ์ฒด์ ์ด๊ธฐ์ํ๋ฅผ ์ง์
๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ง์ ์ ์คํ๋ ํจ์
class Person {
constructor(name,first,second){
this.name= name;
this.first = first;
this.second = second;
}
}
var kim = new Person('kim',10,20);
๋ฉ์๋ ์์ฑ
1) ๋ด๋ถ์ ์์ฑ
class Person {
constructor(name,first,second){
this.name= name;
this.first = first;
this.second = second;
}
sum(){
return this.first + this.second
}
}
var kim = new Person('kim',10,20);
2) ์ธ๋ถ์ ์์ฑ
class Person {
constructor(name,first,second){
this.name= name;
this.first = first;
this.second = second;
}
}
//Person์ด๋ผ๋ ์์ฑ์ ํจ์์ ๋ชจ๋ ๊ฐ์ฒด์์ ์ฌ์ฉํ ๋ฉ์๋ ์์ฑ
Person.prototype.sum = function(){
return 'prototype' + (this.first + this.second);
}
var kim = new Person('kim',10,20);
๋ง์ฝ kim์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ๋ค๋ฅธ ๋ฉ์๋ sum ์ ๊ฐ์ง๊ณ ์ถ๋ค๋ฉด ,
kim.sum = function(){
return 'this'+(this.first + this.second);
}
์ด code๋ฅผ ์ถ๊ฐํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ํญ์ ์คํ ์ ๋ค์์ ์ฐ์ ์์๋ก ์คํํจ
1) ๊ฐ์ฒด ๋ณธ์ธ์ด ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋
: kim.sum ํ์ธ
2) ๊ฐ์ฒด์ ์์ฑ์์ Prototype์ ๋ฉ์๋
: Person.prototype
๐ ์์
์์์ ๋ถ๋ชจ code ์ ๊ธฐ๋ฅ์ ์ด์ด๋ฐ์ ๊ณต์ ํ๊ณ ์ฌ์ฉํ๋ ๊ฒ
๊ณ์ ๋ฐ๋ณต๋์ด์ง๋ ๊ฒ์ 1๋ฒ๋ง ์ ์ํ์ฌ ์์์์ผ ์ฌ์ฌ์ฉํจ
ํ์ํ ๊ฒฝ์ฐ
- ํ์ธ์ด ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, code๋ฅผ ์ฌ์ฉํ๋๊ฒฝ์ฐ
- ํด๋น class๋ฅผ ์์ ํ ์ ์๋ ๊ฒฝ์ฐ ( ์์ ์ ์ ๋ฐ์ดํธ ๋ถ๊ฐ ๋ฑ์ ์ด์ ๋ก)
- ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ์ ์ฌ์ฉํ์๊ฐ ์ ์ ๋ฉ์๋ ์ถ๊ฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ
์ฅ์
์ค๋ณต๋๋ code ์ ๊ฑฐ
๋์ ๋ค๋ฐ์ ์ธ ๋ณ๊ฒฝ ๊ฐ๋ฅํด ์ ์ง๋ณด์์ ํธ์์ฑ ๋๋ชจ
โบ Class ์์์ ์์
class Shape {
constructor(width, height, color) {
this.width = width;
this.height =height;
this.color = color;
}
draw () {
console.log(`drawing ${this.color} color of`);
}
getArea() {
return width * this.height;
}
}
class Rectangle extends Shape{ }
class Triangle extends Shape{
draw(){
console.log('โฒ')
}
//overriding
getArea(){
return (this.width * this.height)/2;
}
}
const rectangle = new Rectangle(20,20,'blue');
rectangle.draw();
const triangle = new Triangle(20,20,'red');
triangle.draw();
Shape : ๋ชจ์์ ๋ง๋๋ class
Triangle๋ Shape์ ์์๋ฐ์์ผ๋ก์จ draw, getArea() ๋ณ์์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ํ์ ์์ด ์ฌ์ฉํ ์ ์๊ณ ,
draw() overriding ์ ํตํด draw() ๋ฉ์๋ ์ฌ์ ์
โ instanceof
object ๊ฐ class์ instance์ธ์ง ์๋์ง ํ์ธ
console.log(rectangle instanceof Rectangle); // True
console.log(triangle instanceof Rectangle); // False
console.log(triangle instanceof Triangle); // True
console.log(triangle instanceof Shape); // True
console.log(triangle instanceof Object); // True
super
๋ถ๋ชจ class๋ฅผ ๋ถ๋ฌ์ ์ผ์ ์ํค๊ณ , ๋ถ๋ชจ๊ฐ ํ์ง ๋ชปํ๋ ์ผ์ ๋๋ง ํ๋๋ก ํ๋ ๊ฒ
๋ถ๋ชจ๊ฐ ๊ฐ์ง ๊ธฐ๋ฅ์ ์คํ + ์์์์๋ง ๊ตฌํํ ๊ธฐ๋ฅ๊ณผ ์ฎ์ด์ ์ฌ์ฉ๊ฐ๋ฅ
โ ์์ class (PersonPlus) ์ ์ธ์๋ฅผ ๋ํด์ฃผ๊ณ ์ถ์ ๊ฒฝ์ฐ
PersonPlus ์ constructor ์ ์ ๋ถ ๋ค์ ์ฐ๋๊ฑด ๋นํจ์จ
<๋ถ๋ชจ>
class Person {
constructor(name,first,second){
this.name= name;
this.first = first;
this.second = second;
}
sum(){
return this.first + this.second;
}
}
<์์>
class PersonPlus extends Person{
average(){
return (this.first+this.second)/2;
}
}
↓
class PersonPlus extends Person{
constructor(name,first,second,third){
super(name,first,second,third)
this.third = third;
}
sum(){
return super.sum()+this.third;
}
average(){
return (this.first+this.second+this.third)/2;
}
}
var kim = new PersonPlus('kim',10,20,30);
console.log('kim',kim.average());
์์ class(PersonPlus)์์ ๋ถ๋ชจ class(Person) ์ name,first,second ์ return ๋ฐ์ ์ฌ์ฉ ๊ฐ๋ฅ
๐ง ์๊ฐํด๋ณผ ๊ฒ
์์์ ๋ฌด์์ธ๊ฐ?
์์์ ๋ถ๋ชจ code ์ ๊ธฐ๋ฅ์ ์ด์ด๋ฐ์ ๊ณต์ ํ๊ณ ์ฌ์ฉํ๋ ๊ฒ
์์์ด ์์ผ๋ฉด ๋ฌด์์ด ๋ถํธํ์ง?
์์์ด ์์ผ๋ฉด ํ์ํ ๋ฉ์๋๋ค์ ์ค๋ณต์ผ๋ก ๊ตฌํํด ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๋ค.
์์์ด ์์ผ๋ฉด ์ผ๋ถ๋ถ ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์๋ ํด๋์ค ๋ด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด ํ์ ์ค๋ฅ๊ฐ ๋ ์๋ ์๊ณ ,
ํน์ (๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ )ํด๋์ค๋ค ์ ๋ถ๋ฅผ ๋ณ๊ฒฝํด์ผ ํด ์ ์ง๋ณด์์ ์ข์ง ์๋ค.
<์์๋ก ๊ณต๋ถํ๊ธฐ >
class ์ํ๊ธฐ {
int numberOfCoffee;
puTcoins(){}
makeCofffe(){}
}
โ getter , setter ๋ฅผ ์ฌ์ฉํ๋ ์ด์
numberOfCoffee<0์ด ๋ ์ ์์
์ฌ์ฉ์๊ฐ -1๊ฐ์๊ฑธ๋ก ์ง์ ํ๋ฉด setter ๋ก 0์ผ๋ก ๋ง๋ค์ด์ฃผ ์ฃผ๋ ๊ฒ
โ private ์ฐ๋ ์ด์
์ฌ์ฉ์๊ฐ ๋ง์๋๋ก ์ค์ ํ๋ฉด ์๋๋ private numberOfCoffee๋ก ์ง์ => encapsulate
getter & setter
class User {
constructor(firstName, lastName,age) {
this.firstName = firstName;
this.lastName= lastName;
this.age = age;
}
//getter
get age() {
return this._age;
}
//setter
set age(value) {
// if(value<0){
// throw Error ('age can not be negetive');
// }
this._age = value<0? 0:value;
}
}
const user1 = new User('Steve','Job',-1);
console.log(user1.age);
getter setter : _ ๋ณ์ (์ธ๋๋ฐ)
ํธ์ถ ์์๋ .๋ณ์ ๋ก ํธ์ถ ๊ฐ๋ฅ
getter ์ ์ ์๊ฐ ( get age() )
this.age = age
this.age
=> ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ age ๊ฐ์ ธ์ค๊ธฐ X
=> get age() getter ํธ์ถ O
setter ์ ์ ์๊ฐ
this.age = age
=> ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ ํ ๋น X
=> setter ํธ์ถ
Field ( public, private) (์์ง ์ต์ ์ ๋ฐ์ดํธ ์๋จ)
์์ฑ์ฌ๋ฅผ ์ฐ์ง ์๊ณ field ์ ์ ๊ฐ๋ฅ
class Temp {
publicField = 2;
#privateField = 0;
}
const temp = new Temp();
console.log(Temp.publicField); //2
console.log(Temp.privateField); //undefined
static
object ์ ๊ด๊ณ์์ด class ์์ฒด์ ์ฐ๊ฒฐ
๋ค์ด์ค๋ data ์ ์๊ด์์ด ๊ณตํต์ ์ผ๋ก class์์ ์ฌ์ฉํ๋ ๊ฒ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ์ ์ค์ผ ์ ์์
class Article {
static publisher = 'Tami world';
constructor (num){
this.num= num;
}
static printPublicher() {
console.log(Article.publisher);
}
}
const article1 = new Article(1);
console.log(article1.publisher); //undefined
console.log(Article.publisher); // Tami world
Article.publisher ์ฒ๋ผ
class ์์ฒด๋ก ๋ถ๋ฌ์ค์ผ ํจ
toString() ?
object class ๋ค์ javascript ์ object๋ฅผ ์์ํ ๊ฒ
constructor, toString()....
์ด๋ค object๋ฑ ๊ณตํต ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์์
console.log(triangle.toString()); // [Object, Object]
class Triangle extends Shape{
toString() {
return `Triangle color : ${this.color}`;
}
}
console.log(triangle.toString()); // Triangle color : red
์ ์ฉํ ์ฌ์ดํธ
BABEL
ํ์ฌ ์ง code๋ฅผ ์์ ๋ฒ์ ์ javascript ๋ก ๋ณํํด์ฃผ๋ ์ปดํ์ผ๋ฌ&ํธ๋์คํ์ผ๋ฌ
์์ฑํ code๋ฅผ ๊ณผ๊ฑฐ์ code๋ก converting => ์ค์ ์น๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ๋๋ก
์ฐธ๊ณ ์์
www.youtube.com/watch?v=_DLhUBWsRtw
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript ํจ์ํธ์ถ Call / Bind ๋ฉ์๋ (0) | 2021.03.11 |
---|---|
JavaScript ํ๋กํ ํ์ (prototype) ์ดํด (0) | 2021.03.10 |
[์๋ฐ์คํฌ๋ฆฝํธ] fetch() API ํจ์๋ก ํธ์ถํ๊ธฐ (4) | 2021.02.26 |
์๋ฐ์คํฌ๋ฆฝํธ์ Promise()๋ก callback์ง์ฅ ๋ฒ์ด๋๊ธฐ (0) | 2021.02.25 |
Javascript JSON.parse(), JSON.stringify() ์ฌ์ฉํ๋๋ฒ (0) | 2021.02.23 |
๋๊ธ