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 

 

๋Œ“๊ธ€์ˆ˜0