<aside> ๐ก javascript์ ํด๋์ค ๋ฌธ๋ฒ์ ES6์์ ๋์ ๋์๋ค.
</aside>
class
ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.class Person {
// constructor๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ด์.
constructor(name, age) {
// ์ด๋ฆ(name)๊ณผ ๋์ด(age)๊ฐ ์์ผ๋ฉด ์ฌ๋์ด ์๋์ฃ ?
// new๋ผ๋ ํค์๋๋ฅผ ์ด์ฉํด์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋, ๊ธฐ๋ณธ์ ์ผ๋ก
// ๋ฃ์ด์ผ ํ๋ ๊ฐ๋ค์ ์๋ฏธํด์! :)
// ์ฌ๊ธฐ์ ๋งํ๋ this๋ ๋ง๋ค์ด์ง ์ธ์คํด์ค๋ฅผ ์๋ฏธํ๋ค๊ณ ์๊ฐํด์ฃผ์ธ์!
this.name = name;
this.age = age;
}
// ๋ค์ํ ๋ฉ์๋๋ฅผ ์๋์ ๊ฐ์ด ์ ์ํ ์ ์์ด์.
// ์ฌ๊ธฐ์ this.name์ผ๋ก ๋ด๋ถ ๊ฐ์ ์ ๊ทผํด์ผ ํจ์ ์์ง ๋ง์ธ์! :)
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);
// ๋ง๋ ๊ฐ์ฒด๋ฅผ ํ ๋๋ก ๋ฉ์๋ ํธ์ถํด๋ณด๊ธฐ
person1.sayHello(); // ์ถ๋ ฅ: "Hello, my name is Alice and I am 30 years old."
person2.sayHello(); // ์ถ๋ ฅ: "Hello, my name is Bob and I am 25 years old."
Person
Class๋ name
๊ณผ age
์์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, sayHello
๋ฉ์๋๋ฅผ ์ ์ํ๋ค. new
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ Person
Class์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , sayHello
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
constructor
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ค.class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
const person = new Person('Alice', 20);
constructor
๋ฉ์๋๋ name
๊ณผ age
๋ฅผ ์ธ์๋ก ๋ฐ์ this.name
๊ณผ this.age
์์ฑ์ ์ด๊ธฐํํ๋ค.
getter
์ setter
๋ก Class์ ์์ฑ์ ์ ๊ทผํ ์ ์๋ค.getter
: ์์ฑ ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋setter
: ์์ฑ ๊ฐ์ ์ค์ ํ๋ ๋ฉ์๋// Getters์ Setters
// ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด -> G, S
// ํด๋์ค --> ๊ฐ์ฒด(์ธ์คํด์ค)
// ํ๋กํผํฐ(constructor)
// new Class(a, b, c)
class Rectangle {
constructor(height, width) {
// underscore : private(์๋ฐํ๊ณ , ๊ฐ์ถฐ์ผ ํ ๋)
this._height = height;
this._width = width;
}
// width๋ฅผ ์ํ getter
get width() {
return this._width;
}
// width๋ฅผ ์ํ setter
set width(value) {
// ๊ฒ์ฆ 1 : value๊ฐ ์์์ด๋ฉด ์ค๋ฅ!
if (value <= 0) {
//
console.log("[์ค๋ฅ] ๊ฐ๋ก๊ธธ์ด๋ 0๋ณด๋ค ์ปค์ผ ํฉ๋๋ค!");
return;
} else if (typeof value !== "number") {
console.log("[์ค๋ฅ] ๊ฐ๋ก๊ธธ์ด๋ก ์
๋ ฅ๋ ๊ฐ์ด ์ซ์ํ์
์ด ์๋๋๋ค!");
return;
}
this._width = value;
}
// height๋ฅผ ์ํ getter
get height() {
return this._height;
}
// height๋ฅผ ์ํ setter
set height(value) {
// ๊ฒ์ฆ 1 : value๊ฐ ์์์ด๋ฉด ์ค๋ฅ!
if (value <= 0) {
//
console.log("[์ค๋ฅ] ์ธ๋ก๊ธธ์ด๋ 0๋ณด๋ค ์ปค์ผ ํฉ๋๋ค!");
return;
} else if (typeof value !== "number") {
console.log("[์ค๋ฅ] ์ธ๋ก๊ธธ์ด๋ก ์
๋ ฅ๋ ๊ฐ์ด ์ซ์ํ์
์ด ์๋๋๋ค!");
return;
}
this._height = value;
}
// getArea : ๊ฐ๋ก * ์ธ๋ก => ๋์ด
getArea() {
const a = this._width * this._height;
console.log(`๋์ด๋ => ${a}์
๋๋ค.`);
}
}
// instance ์์ฑ
const rect1 = new Rectangle(10, 7);
rect1.getArea();
// const rect2 = new Rectangle(10, 30);
// const rect3 = new Rectangle(15, 20);
subclass
, derived class
๋ผ๊ณ ํ๋ค.superclass
๋๋ base class
๋ผ๊ณ ํ๋ค.<์์>
Dog Class
๋ Animal Class
๋ฅผ ์์๋ฐ๊ณ , Dog Class
์์ speak
๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ Animal Class
์ speak
๋ฉ์๋๋ฅผ ๋ฎ์ด์ด๋ค.
// ๋๋ฌผ ์ ์ฒด์ ๋ํ ํด๋์ค์์
class Animal {
// ์ด๋ฆ์ ํ์๋ก ๋ฐ์์ผ ํด์
constructor(name) {
this.name = name;
}
// ๋๋ฌผ์ ํ๋์ ์ ์ํ๋ ๋ฉ์๋
speak() {
console.log(`${this.name} makes a noise.`);
}
}
// ๋๋ฌผ ํด๋์ค๋ฅผ ์์๋ฐ๋ Dog ํด๋์ค๋ฅผ ๋ง๋ค์ด์
class Dog extends Animal {
// ์์๋ฐ์ ๋, speak()๋ฅผ ์
๋ง์ ๋ง๊ฒ ์ฌ์ ์ํด์.
speak() {
console.log(`${this.name} barks.`);
}
}
// Dog๋ฅผ ๋ง๋ค ๋๋ Animal์ ์์์ ๋ฐ์ class์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์ ํ์๋ก
// ๋ฐ์์ผ ํด์!
let d = new Dog('Mitzie');
// speak๋ 'makes a noise'๊ฐ ์๋๋ผ, 'barks'๊ฐ ์ถ๋ ฅ๋๋ค์.
d.speak(); // "Mitzie barks."
<aside> ๐ก ์ฆ, ์ธ์คํด์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ ๋ ์ฌ์ฉํ๋ค.
</aside>
class Calculator {
static add(a, b) {
return a + b;
}
static subtract(a, b) {
return a - b;
}
}
console.log(Calculator.add(1, 2)); // 3
console.log(Calculator.subtract(3, 2)); // 1