β
κ°μ μμλΆλΆμμ ν΄λμ€μ μ€λΈμ νΈμ μ°¨μ΄μ μ λΆμ΄λΉ΅μ λΉμ ν΄μ μ€λͺ
νμ
¨λλ°, μμ£Ό μ½κ² μ΄ν΄λμλ€..π
ν΄λμ€λ λΆμ΄λΉ΅μ λ§λλ νμ΄λΌκ³ μκ°νλ©΄, μ€λΈμ νΈλ λΆμ΄λΉ΅μ΄λΌκ³ μκ°νλ©΄ λλλ°, ν΄λμ€ μ체μλ λ°μ΄ν°κ° λ€μ΄μμ§ μκ³ , ν
νλ¦Ώλ§ μ μν΄ λλλ€! μ΄λ° ν΄λμ€λ₯Ό μ΄μ©ν΄μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ μ€λΈμ νΈκ° λλ€! (λΆμ΄λΉ΅ νμ μ΄μ©ν΄μ μ¬λ£μ λ°λΌ μ¬λ¬ μ’
λ₯μ λΆμ΄λΉ΅ νμ!)
class Person {
constructor(name, age) { // μΈμ€ν΄μ€ μμ± λ° μ΄κΈ°ν
//fields
this.name = name;
this.age = age;
}
//methods
speak() {
console.log(`${this.name}: hello`)
}
}
π constructor μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄κΈ°ννκΈ° μν νΉμν λ©μλμ΄λ©°, ν΄λμ€ λ΄μ μ΅λ νκ°λ§ μ‘΄μ¬ν μ μλ€. constructor λ΄λΆμ thisλ ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¨λ€. constructor μ μλ΅ ν μ μλλ°, constructor μ μλ΅νμ¬λ, μ묡μ μΌλ‘ ν΄λμ€μ λΉ constructor κ° μ μλλ€. (μ¦ constructorμ μλ΅ν ν΄λμ€λ λΉ constructor μ μν΄ λΉ κ°μ²΄κ° μμ±λλ€.) λ, constructor μμλ return λ¬Έμ μ¬μ©ν μ μλλ°, constructor λ΄λΆμμλ μ묡μ μΌλ‘ this, μ¦ μΈμ€ν΄μ€λ₯Ό λ°ννκΈ° λλ¬Έμ΄λ€.
(this μ λν΄μλ μΆνμ μμΈν 곡λΆν μμ μ΄λ€.)
class User {
constructor(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age() {
return this._age;
}
set age(value) {
this._age = value < 0? 0 : value;
// ageμ μ¬μ©μκ° μ€μλ‘ μμλ‘ μ€μ νλ©΄ 0μΌλ‘ λ€μ μ€μ λλ€.
}
}
const user1 = new User('Steve', 'Job', -1);
// μ¬μ©μκ° μ€μλ‘ λμ΄λ₯Ό -1λ‘ μ€μ νλ€κ³ κ°μ νμ.
// μ΄λ¬ν μ€μλ₯Ό λ°©μ§νκΈ° μν΄ getter, setter λ₯Ό μ¬μ©νλ€!
πμ¬κΈ°μ μ£Όμν΄μΌν κ²μ΄ μλλ°, getter κ³Ό setter μμ μλ λ³μλ€μ 보면 νλμ λ€λ₯΄κ² μ μλμλ€.
this.age λμ μ this._ageλ‘ λμλλ°, λ§μ½ _age κ° μλ νλμ λκ°μ΄ μ μνλ€λ©΄, 무ν루νμ λΉ μ§κ² λλ€. κ·Έ μ΄μ μ λν΄ μ μ μ΄ν΄λ³΄μ!
const user1 = new User('Steve', 'Job', -1);
// user1.firstName = 'Steve'
// user1.lastName = 'job'
// user1.age = -1
μ¬κΈ°μ user.age λ setter ν¨μκ° μλμ μΌλ‘ μ€νλλλ°, μ΄λ λ§μ½ setter ν¨μμ λ³μκ° this.age λΌλ©΄, κ²°κ΅ user1.age κ° λλ κ²μ΄κΈ° λλ¬Έμ, μ΄ user1.age λ λ setter ν¨μλ₯Ό μλμ μΌλ‘ μ€νμν€κ² λλ―λ‘ λ¬΄ν루νμ λΉ μ§κ² λλ κ²μ΄λ€. κ·Έλ κΈ°μ λ³μλ₯Ό λ³κ²½ν΄μΌ νλ€!
const ellie = new Person('ellie', 20);
ellie.speak(); //ellie: hello!
π μμμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ
μ΄λ€!
κ°λ¨ν μ μνμλ©΄, μ΄λ€ κ°μ²΄μ νλ‘νΌν° νΉμ λ©μλλ₯Ό λ€λ₯Έ κ°μ²΄κ° μμλ°μ κ·Έλλ‘ μ¬μ©νλ κ²!
μμμ΄λΌλ κ°λ
μ λ£μ CSSμμλ μ¬μ©ν κΈ°μ΅μ΄ λ μ¬λλ€.
position: relative; // λΆλͺ¨
position: absolute; // μμ
CSS μμ μμμ μμΉλ₯Ό μ§μ ν λ, λΆλͺ¨μ μμκ΄κ³λ₯Ό μ΄μ©νμ¬, λΆλͺ¨κΈ°μ€μμ μμμ μμΉλ₯Ό μ€μ ν μ μλ€. μ΄μ²λΌ μλ°μ€ν¬λ¦½νΈμ μμ κ°λ μμλ λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€λ‘ ꡬλΆλμ΄μ§λ€.
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 {} // μμ ν΄λμ€
Rectangle ν΄λμ€λ extendsλ‘ λΆλͺ¨ ν΄λμ€μΈ Shapeλ₯Ό μμ λ°μ΅λλ€.
κ·Έλ°λ° λ§μ½, λΆλͺ¨ ν΄λμ€λ₯Ό μμ λ°μ§λ§, νμν κΈ°λ₯λ€λ‘ λ€μ μ¬μ μλ₯Ό νκ³ μΆμΌλ©΄ μ΄λ»κ² ν΄μΌν κΉ? μ΄κ²μ μ€λ²λΌμ΄λ©μ΄λΌκ³ λΆλ₯΄λλ°, μ€λ²λΌμ΄λ©μ μμ ν΄λμ€κ° κ°μ§κ³ μλ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μ νμ¬ μ¬μ©νλ λ°©μμ λ»νλ€.
class Triangle extends Shape { // νμν ν¨μλ§ μ¬μ μ -> μ€λ²λΌμ΄λ©
draw() {
console.log('πΊ');
}
getArea() {
return (this.width * this.height) / 2;
}
}
const triangle = new Triangle(20,20,'red');
triangle.draw(); // πΊ
console.log(triangle.getArea()); // 200
λ§μ½ λΆλͺ¨ν΄λμ€μ draw() ν¨μλ μ¬μ©νκ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉ?
draw() {
super.draw(); // λΆλͺ¨ν΄λμ€μ draw() ν¨μλ κ°μ΄ νΈμΆλλ€.
console.log('πΊ');
}
// μΆλ ₯μ 'drawing red color of πΊ' μ΄ λ κ²μ΄λ€.
instanceOfλ Aκ° Bμ instanceμΈμ§ λ±μ λν΄ νμΈν μ μλ μ°μ°μμ΄λ€.
console.log(rectangle instanceof Rectangle); // true μ false λ₯Ό νΈμΆ. -> true
console.log(rectangle instanceof Shape); // true
console.log(rectangle instanceof Object); // true
λλ¦Όμ½λ© κ°μλ₯Ό λ£κ³ μμ±νμμ΅λλ€.π