language/javascript
ํด๋์ค์ ์ค๋ธ์ ํธ์ ์ฐจ์ด์
๊ฑด๋ง๋
2021. 11. 25. 21:26
class
- ์ฐ๊ด์๋ data๋ค์ ํ๊ณณ์ ๋ฌถ์ด๋๋ ์ปจํ ์ด๋
- ์์ฑ(fields), ํ๋(methods)
- data class: ๊ด๋ จ์๋ data(field)๋ง ์ ์๋ ํด๋์ค
- ์บก์ํ: ํด๋์ค ๋ด์์ ๋ด๋ถ์ ์ผ๋ก ๋ณด์ฌ์ง๋ ๋ณ์, ์ธ๋ถ์์ ๋ณด์ฌ์ง๋ ๋ณ์๋ฅผ ๋๋
- ์์๊ณผ ๋คํ์ฑ
1. Class
- ๋ถ์ด๋นต์ ๋ง๋ค ์ ์๋ ํ
- template(ํ)๋ง ์ ์, ์ค์ data๋ ๋ค์ด์์ง ์๋ค.
- ํ ๋ฒ๋ง ์ ์ธํ๋ค.
2. Object
- ํด๋์ค๋ฅผ ์ด์ฉํด์ ์ค์ data๋ฅผ ๋ฃ์ด์ ๋ง๋๋ ๊ฒ
- ํด๋์ค๋ฅผ ์ด์ฉํด์ ์์ฑ๋ ์๋ก์ด instance
- ์ฌ๋ฌ ๋ฒ ์์ฑ๋ ์ ์๋ค.
3. javascript์ class
- ES6์ ๋์ ๋์๋ค
- ๊ธฐ์กด์ prototype์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ๋ฒ๋ง ์ถ๊ฐ๋์๋ค. (syntactical sugar)
4. Class declarations
class Person {
// constructor, ์์ฑ์, ํ์ํ data ์ ๋ฌ
constructor(name, age) {
// fields
this.name = name;
this.age = age;
}
// methods
speak() {
console.log(`${this.name}: hello!`);
}
}
const ellie = new Person('ellie', 20);
console.log(ellie.name);
console.log(ellie.age);
ellie.speak();
5. Getter and setters
class User {
constructor(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age() { // ์ ์ํ๋ ์๊ฐ this.age๋ ๋ฐ๋ก getter ํธ์ถ
return this._age;
}
set age(value) { // ์ ์ํ๋ ์๊ฐ ๊ฐ์ ํ ๋น(= age)ํ ๋ setter ํธ์ถ
// if (value < 0) {
// throw Error('age can not be negative');
// }
this._age = value;
this._age = value < 0 ? 0 : value;
// = value์์ setter ๊ณ์ํด์ ํธ์ถํ๊ฒ ๋๋ค
// ๋ฌดํ๋ฐ๋ณต ๋ฐฉ์งํ๊ธฐ ์ํด getter, setter ๋ณ์ ์ด๋ฆ ๋ณ๊ฒฝ
}
}
const user1 = new User('Steve', 'Jobs', -1);
console.log(user1.age);
- ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ user๊ฐ ์๋ชป ์ฌ์ฉํด๋ ๋ฐฉ์ด์ ์ธ ์์ธ๋ก ๋ง๋ค์ด์ค ์ ์๋ ๊ฒ
6. Fields
class Experiment {
publicField = 2; // ์ธ๋ถ ์ ๊ทผ ๊ฐ๋ฅ
#privateField = 0;
// ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ(r/w) ๊ฐ๋ฅ
// ํด๋์ค ์ธ๋ถ์์๋ read, write ๋ถ๊ฐ
}
const experiment = new Experiment();
console.log(experiment.publicField);
console.log(experiment.privateField); // undefined
7. Static properties and methods
class Article {
static publisher = 'Dream Coding';
constructor(articleNumber) {
this.articleNumber = articleNumber;
}
static printPublisher() {
console.log(Article.publisher);
}
}
const article1 = new Article(1);
const article2 = new Article(2);
console.log(article1.publisher); // undefined
console.log(Article.publisher); // Dream Coding
// ํจ์ ํธ์ถ ์์๋ class ์ด๋ฆ ๋ช
์
Article.printPublisher(); // Dream Coding
- ํด๋์ค๊ฐ ๊ฐ์ง ๊ณ ์ ํ ๊ฐ์ ๋์ผํ๊ฒ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ
- ๋ค์ด์ค๋ data์ ์๊ด์์ด ๊ณตํต์ ์ผ๋ก ํด๋์ค์์ ์ธ ์ ์๋ ๊ฒ์ผ ๋ use
- object์ ์๊ด์์ด ํด๋์ค ์์ฒด์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ
- object๋ง๋ค ํ ๋น๋๋ ๊ฒ์ด ์๋๋ผ, ํด๋์ค ์์ฒด์ ๋ถ์ด์๋ ๊ฒ
8. ์์๊ณผ ๋คํ์ฑ
class Shape {
constructor(width, height, color) {
this.width = width;
this.height = height;
this.color = color;
}
draw() {
console.log(`drawing ${this.color} color!`);
}
getArea() {
return this.width * this.height;
}
}
class Rectangle extends Shape {
// Shape์ fields์ methods๊ฐ ํฌํจ๋๋ค.
}
class Triangle extends Shape {
draw() {
super.draw();
console.log('triangle');
}
getArea() {
// ์ค๋ฒ๋ผ์ด๋ฉ: ํ์ํ ํจ์๋ง ์ฌ์ ์ํด์ ์ฌ์ฉ
return (this.width * this.height) / 2;
}
}
const rectangle = new Rectangle(20, 20, 'blue');
rectangle.draw(); // drawing blue color!
console.log(rectangle.getArea()); // 400
const triangle = new Rectangle(20, 20, 'red');
triangle.draw();
// drawing red color!
// triangle
console.log(triangle.getArea()); // 200
9. instanceOf
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
// js์ ๋ชจ๋ object๋ js์ Object ์์ํ ๊ฒ
console.log(triangle.toString()); // ์ค๋ฒ๋ผ์ด๋ฉ๋ ๊ฐ๋ฅ
- ์ผ์ชฝ์ object๊ฐ ์ค๋ฅธ์ชฝ์ class์ instance์ธ์ง ์๋์ง ํ์ธ
- true, false๋ฅผ return
์ฐธ๊ณ
youtube ๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ
https://www.youtube.com/watch?v=_DLhUBWsRtw&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=6