• 회원가입
  • 로그인
  • 구글아이디로 로그인

[JS-엘리] JS 6강 - 클래스・오브젝트 차이점(class vs object), 객체지향 언어 클래스 정리 | (JavaScript ES6)

1,761  

동영상 수강 전 본문 내용 스캔.

동영상 수강 후 본문 내용 스캔.

 

목차

 

00:39 class 개념

02:55 class vs. object 차이점

04:20 class 등장

06:38 class 선언 + 07:23 object 생성

08:17 getter・setter

14:00 Public・Private

15:00 Static

16:54 extends (= 상속・다양성)

21:19 instanceOf

23:14 mdn javascript reference

24:20 지난 시간 퀴즈 정답 (4칙 연산 + 나머지)

 

 

 

00:39 

class 개념

[일반 class] = (field + method)로 구성. 

 

class person {

    name; // 속성 (field)

    age;

    speak(); // 행동 (method)

}

 


[데이터 class] - (fileld)만으로 구성. 

 

class Person {

    name; // 속성 (field)

    age;

}


PS. 객체 지향 언어는 캡슐화(encapsulation)・상속・다양성 등이 가능.

 

02:55 

class vs. object

[class] (예) 붕어빵 굽는 틀. / 메모리 차지 X

 

- template

- declare once

- no data in

 


[object] (예) 팥붕어빵, 크림붕어빵, 피자붕어빵.  / 메모리 차지 O

 

- instance of a class

- created many times

- data in

 


06:38 

1. Class 선언 + Object 생성


class Person {

    // constructor

    constructor(name,age) {

        // fiels

        this.name = name;

        this.age = age;

    }


    // method

    speak() {

        console.log(`${this.name}: hello!`);

    }

}


const ellie = new Person('ellie', 20);

console.log(ellie.name);

console.log(ellie.age);

ellie.speak();

 

결과보기

 

08:17 

2. getter・setter

[잘못된 코드]

 

// 2. Gutter & Setter

class User {

    constructor(firstName, lastName, age) {

        this.firstName = firstName;

        this.lastName = lastName;

        this.age = age;

    }


    get age() {

        return this.age;

    }

    

    set age(value) {

        // 예1 - 값을 그대로 출력

        // this.age = value;

        // 예2 - 경고 메세지 띄우기

        // if (value < 0) {

        //     throw Error('age can not be negative');

        // }

        // 예3 - 값을 새로 설정

        this.age = value < 0 ? 0 : value;

    }

}


const user1 = new User('Steve', 'Job', -1);

console.log(user1.age);

 

결과보기


[올바른 코드]

 

// 2. Gutter & Setter

class User {

    constructor(firstName, lastName, age) {

        this.firstName = firstName;

        this.lastName = lastName;

        this.age = age;

    }


    get age() {

        return this._age;

    }

    

    set age(value) {

        // 예1 - 값을 그대로 출력

        // this._age = value;

        // 예2 - 경고 메세지 띄우기

        // if (value < 0) {

        //     throw Error('age can not be negative');

        // }

        // 예3 - 값을 새로 설정

        this._age = value < 0 ? 0 : value;

    }

}


const user1 = new User('Steve', 'Job', -1);

console.log(user1.age);

 

결과보기 

 

14:00

3. Fields (public, private)

 

// 3. Fields (public, private)

// Too soon !

// https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes/Class_fields

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields


class Experiment {

    publicField = 2;

    #privateField = 0;

}

const experiment = new Experiment();

console.log(experiment.publicField);

console.log(experiment.privateField);

 

결과보기

PS. IE 및 Safari는 지원 X. (Babel 이용해서 변환 필요.)

 

15:00

4. Static properties and methods

각 객체에 공통으로 사용되는 속성을 class에서 constuctor 없이 바로 정의할 때 사용.

 

// 4. Static properties and methods

// Too soon !!

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);

Article.printPublisher();

 

결과보기

 

16:54

5. 상속・다양성

각 객체에 공통되는 속성과 메서드 유형을 정의 후, 상속하고 별도로 추가 정의해 사용.

 

// 5. Inheritance

// a way for one class to extend another class.

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 this.width * this.height;

    }

}


class Rectangle extends Shape {}

class Triangle extends Shape {

    //super.draw();

    draw() {

        console.log('삼각형');

    }

    getArea() {

        return (this.width * this.height) / 2;

    }

    toString() { // 아래 6. instanceof 강의 중에 나옴.

        return `Triangle: color: ${this.color}`;

 

    }

}


const rectangle  = new Rectangle(20, 20, 'blue');

rectangle.draw();

console.log(rectangle.getArea());


const triangle = new Triangle(20, 20, 'red');

triangle.draw();

console.log(triangle.getArea());


결과보기

 

21:19

6. instanceof 연산자

 

// 6. Class checking : 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

console.log(triangle.toString()); // 5. 상속・다양성 예에서 재정의 없을 시, [{object Object] 찍힘.

 

결과보기

 

PS.

 

23:14 

mdn javascript reference

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference

 

Value properties

Error objects

Indexed Collections

Keyed collections

Control abstraction (Promise)

Structured data (JSON)

 

 

PS. (this, binding, closure)는 다음 편에..

 

24:20

PS. 지난 시간 퀴즈 정답

 

// Fun quiz time

// function calculate(command, a, b)

// command: add, substract, divide, multiply, remainder


function calculate(command, a, b) {

    switch(command) {

        case 'add':

            return a + b;

        case 'substract':

            return a - b;

        case 'divide':

            return a / b;

        case 'multiply':

            return a * b;

        case 'remainder':

            return a % b;

        default:

            throw Error('unknown command');

    }

}


console.log(calculate('add', 3, 4));

console.log(calculate('substract', 3, 4));

console.log(calculate('divide', 3, 4));

console.log(calculate('multiply', 3, 4));

console.log(calculate('remainder', 3, 4));

 

결과보기

※ 정해진 데이터 처리할 땐, if문보다는 switch문 이용 권장.

 


분류 제목
JS-바위 JS 80~82강 - 자바스크립트 객체 클래스
JS-바위 JS 77~79강 - 자바스크립트 모듈 활용 (Javascript Module)
JS-바위 JS 73~76강 - 테이블 페이지네이션 (Table Pagination)
JS-바위 JS 72강 - AOS 라이브러리 - 슝슝 나타나는 스크롤 애니메이션
JS-바위 JS 69~71강 - 숫자 그래프 애니메이션 (Number Animation)
JS-바위 JS 68강 - animate.css 라이브러리 - 스크롤이벤트 적용
JS-바위 JS 64~67강 - tailwindcss (node js - CSS framework) - CSS 없이 스…
JS-바위 JS 61~63강 - 최신 JS 문법 (ECMA SCRIPT 6) - 변수선언 키워드 let, const, …
JS-바위 JS 60강 - 인스타그램 (instagram) API - 인스타그램 피드를 웹사이트에 출력
JS-바위 JS 56~59강 - 쿠키 (Cookie) 이용해 「오늘 하루 안보기 팝업창 띄우기」 생성
JS-바위 JS 52~55강 - 멀티플 슬라이드 (Multiple Slideshow)
JS-바위 JS 51강 - 스크롤트리거 (scrollTrigger) - 스크롤 애니메이션 구현
JS-바위 JS 46~50강 - 필터링 반응형 갤러리 (Fitered Gallery)
JS-바위 JS 45강 - 하이라이트 무빙 탭 애니메이션 (Highlight Moving Tab animation)
JS-바위 JS 42~44강 - 풀스크린 슬라이드 (FullScreen Slide) 1 - CSS로만 구현
JS-바위 JS 41강 - 드롭다운 서브메뉴 (Dropdown Submenu)
JS-바위 JS 40강 - 반응형 일정표 (Gantt chart : 간트 차트)
JS-바위 JS 39강 - 마우스허버 시 따라 움직이는 메뉴바 애니메이션 (MenuBar Animation) ※ 언더바…
JS-바위 JS 38강 - 숫자 바뀌는 애니메이션 (Number Animation) (순수JS버전)
JS-바위 JS 37강 - 아코디언 (Accodion) 메뉴 (순수JS버전)
1/35
목록
찾아주셔서 감사합니다. Since 2012