#16. Class Syntax(1)

2langk·2021년 3월 23일
0

[오분자스 - 개념편]

목록 보기
16/24
post-thumbnail

이번 시간에는 객체 지향 프로그래밍의 꽃인 클래스 문법에 대해 알아보도록 하자.

1. Class
클래스 문법을 프로토타입 문법과 비교해보자.
일단 아래는 프로토타입 문법으로 짠 코드이다.

---prototype

function Book(title, author, year) {
    this.title = title;
    this.author = author;
    this.year = year;
}

Book.prototype.getSummary = function () {
    return `${this.title} was book`;
};

const book1 = new Book('up', 'john', 2021);

위와 동일한 코드를 class를 이용해서 만들어보겠다.

class Book { // 클래스는 일반적으로 대문자로 시작하게 이름 짓는다.
    constructor(title, author, year) {
        this.title = title;
        this.author = author;
        this.year = year
    }
    
    getSummary() {
    	return `${this.title} was book`;
    }
    
    /*  
     *  메소드는 위처럼 간결하게 쓸 수 있다.
     *
     *  getSummary = function() {
     * 	  return `${this.title} was book`;
     *  }
     */
}

const book1 = new Book('up', 'john', 2021)

prototype을 이용한 방법은 생성자 함수와 프로토타입이 분리되어 있었는데, class를 이용해 이것들을 묶을 수 있다.
그리고 클래스 안에서는 prototype을 명시하지 않아도 자바스크립트가 알아서 처리해주기 때문에 코드가 간결해진다.

프로토타입 문법을 잘 이해했다면, 클래스 문법도 어렵지 않을거다.
클래스 문법이 더 간결하기 때문에 개인적으로는 클래스 문법을 사용하는 것을 추천한다.

마무리하기 전에 한 가지 더 소개하고 싶은 것이 있다.


2. Static method
자바스크립트에서 메소드는 크게 두 가지가 있다.
첫 번째는 우리가 계속 써온 prototype을 이용한 인스턴스 메소드이다.
위의 getSummary가 이에 해당한다. 생성된 자식 객체가 접근 가능하다는 점이 static 메소드와 구별되는 특징이다.

두 번째는 static 메소드이다. static 메소드는 instance 메소드와 달리 생성된 객체가 호출할 수 없다.
생성자 함수만이 static 메소드를 호출할 수 있다.
사실 static 메소드를 쓸 일이 많이 없다고 생각한다. 그냥 이런게 있다 정도만 보고 넘어가도 좋다.

class Book { 
    constructor(title, author, year) {
        this.title = title;
        this.author = author;
        this.year = year
    }
    
    getSummary() {
    	return `${this.title} was book`;
    }
    
    static getTopBookStore() {
    	return '교보문고'
    }
}

const book1 = new Book('up', 'john', 2021)

선언은 static 키워드를 앞에 붙여서 선언하면 된다.

사용은 Book을 이용해 호출하면 된다.

Book.getTopBookStore() // '교보문고'
book1.getTopBookStore() // error. 자식 객체에서는 접근할 수 없다.

마지막으로 prototype문법에서 static 메소드를 정의하는 방법을 소개하고 포스트를 마무리 해야겠다.

function Book(title, author, year) {
    this.title = title;
    this.author = author;
    this.year = year;
}

Book.getTopBookStore = function () {
    return `교보문고`;
};

Book.getTopBookStore() // '교보문고'

오늘은 class 문법과 static 메소드를 소개했다. class 문법을 사용하더라도
자바스크립트에서 클래스는 프로토타입을 기반으로 동작한다는 사실을 기억했으면 한다.

다음에는 클래스 문법으로 상속하는 방법에 대해 소개해보겠다.

0개의 댓글