[JavaScript] 6. 객체지향 언어, class VS object

2022. 2. 22. 12:12·IT/WILT

 

1. Object-oriented programming (객체지향 언어)

 - class : template, declare once, no data in

 - object : instance of a class, created many times, data in

 - JavaScript classes (introduced in ES6) : syntactical sugar over prototype-based inheritance

 

 

2. Class declarations

class Person {
	// constructor
	constructor(name, age) {
    	// fields
        this.name = name;
        this.age = age;
    }
    
    speak() {
    	console.log(`${this.name} : hello!`);
    }
}

const a = new Person('apple', 20);
console.log(a.name);
console.log(a.age);
a.speak();

 

 

3. Getter & Setter

class User {
	constructor(firstName, lastName, age) {
    	this.firstName = firseName;
        this.lastName = lastName;
        this.age = age;
    }
    
    get age() {
    	return this._age;
    }
    
    set age(value) {
    	this._age = value < 0 ? 0 : value;
    }
}

const user1 = new User('Steve', 'Jobs', -1);
console.log(user1.age);

 

 

4. Fields (public, private)

- encapsulation(캡슐화)

class Experiment {
	publicField = 1;
    #privateField = 2;
}

const experiment = new Experiment();
console.log(experiment.publicField); // 1
console.log(experiment.privateField); // undefined

 

 

5. Static properties & methods

class Article {
	static publisher = 'Dream Coding';
    constructor(articleNumber) {
    	this.articleNumber = articleNumber;
    }
    
    static printPublisher() {
    	console.log(Article.publisher);
    }
}

const art1 = new Article(1);
console.log(art1.publisher); // undefined
console.log(Article.publisher); // Dream Coding
Article.printPublisher();

 

 

6. Inheritance & Overriding

 - a way for one class to extend another class.

clss Shape {
	constructor(width, height, color) {
    	this.width = width;
        this.height = height;
        this.color = color;
    }
    
    draw() {
    	consolo.log(`drawing ${this.color} color of`);
    }
    
    getArea() {
    	return width * this.height;
    }
}

class Rectangle extends Shape {}
class Triangle extends Shape {
	draw() {
    	super.draw();
        console.log('^');
    }
	getArea() { 								// Overriding
    	return (this.width * this.height) / 2;
    }
}

const rectangle = new Rectangle(20, 20, 'blue');
rectangle.draw();
const triangle = new Triangle(20, 20, 'red');
triangle.draw();

 

 

7. Class checking : instanceof

console.log(rectangle instanceof Rectangle); // true
console.log(triangle instanceof Triangle); // true
console.log(triangle instanceof Rectangle); // false
console.log(triangle instanceof Shape); // true
console.log(triangle instanceof Object); // true

 

'IT > WILT' 카테고리의 다른 글

[JavaScript] 8. Array  (0) 2022.02.25
[JavaScript] 7. Object  (0) 2022.02.24
[JavaScript] 5. 함수의 선언과 표현, Arrow Function  (0) 2022.02.22
[JavaScript] 4. 코딩의 기본 operator  (0) 2022.02.20
[JavaScript] 3. Data Type, let VS var, hoisting  (0) 2022.02.19
'IT/WILT' 카테고리의 다른 글
  • [JavaScript] 8. Array
  • [JavaScript] 7. Object
  • [JavaScript] 5. 함수의 선언과 표현, Arrow Function
  • [JavaScript] 4. 코딩의 기본 operator
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (574)
      • 혼잣말 (88)
      • TIL (2)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (168)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (39)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    머신러닝
    나만무
    졸업과제
    해커톤
    OS
    크래프톤정글
    pintos
    부산대
    docker
    리액트
    RNN
    NEAR Protocol
    블록체인
    Flutter
    알고리즘
    사이드프로젝트
    프로그래머스
    Pint OS
    코드프레소
    자바스크립트
    파이썬
    딥러닝
    numpy
    글리치해커톤
    니어프로토콜
    JavaScript
    센디
    MailBadara
    핀토스
    react
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
[JavaScript] 6. 객체지향 언어, class VS object
상단으로

티스토리툴바