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

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

1,764  

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

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

 

목차

 

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문 이용 권장.

 


분류 제목
PHP-서기 PHP 51 - 웹사이트크롤링 (= 사이트파싱) ★★★ (= 타사이트 특정부위 가져오기)
JS-서기 JS 8강 - for문 안쪽에 if문 사용 (= 행렬 표만들기 = 줄바꿈 = 줄바꾸기 = 줄변경 = 라인변…
regex PHP 정규표현식 패턴 26강 - (?!패턴) (소괄호 안 물음표 느낌표) : 뒤에 패턴 존재하면 무시, 존…
PHP7-서기 PHP7 32강 - 외부 SMTP 이용해 이메일 보내기 (= 네이버/구글 SMTP 설정법)
JS-바위 JS 18강 - 스크롤트리거 (Scrolltrigger) - 스크롤 애니메이션 구현
regex PHP 정규표현식 패턴 15강 - 수량자 ─ { } (중괄호) - 문자 반복 횟수 특정
PHP-쩡원 PHP 기초 10강 - 게시판 만들기 - 코멘트 (=댓글) , 답댓글 (= 대댓글) 입력, 출력, 입출력
PHP-생코 PHP 25강 - 조건문 논리연산자 (and (&&) , or (||)) ★★★
PHP2020-서기 PHP2020 4강 - 카카오맵 (MySQL 이용해 마커 표시 / 클러스터링 사용)
JS-엘리 JS 6강 - 클래스・오브젝트 차이점(class vs object), 객체지향 언어 클래스 정리 | (Jav…
regex PHP 정규표현식 패턴 17강 - 수량자 ─ *? (별표 물음표), +? (덧셈 물음표), ?? (물음…
JS-서기 JS 12강 - 이벤트핸들러2 (event handler) - onload, onunload, / confi…
서버 서버 - URL RewriteRule (= 라라이트룰 = URL주소치환 = URL주소변경)
regex PHP 정규표현식 패턴 9강 - [^ ] (대괄호안 꺽쇠) ─ 후보문자 제외한 모든 1글자로 된 문자
PHP-쩡원 PHP 기초 8강 - 게시판 만들기 (조회수증가, 날짜형식변경, 파일업로드, 파일명중복방지)
regex PHP 정규표현식 패턴 6강 - \ . (역슬래시 마침표) ─ 단순 문자열로서의 마침표 기호
regex PHP 정규표현식 패턴 21강 - \d (역슬래시 소문자d) : 숫자 , \D (역슬래시 대문자D) : …
PHP-서기 PHP 50 - vscode 이용한 ftp서버상파일 직접 편집/저장
regex PHP 정규표현식 패턴 22강 - \b (역슬래시 소문자b) : 워드(단어)의 경계
코딩 입문 INT 1회 - 코딩을 배워야 하는 이유 1 (나동빈) (23분 31초)
1/35
목록
찾아주셔서 감사합니다. Since 2012