클래스는 객체지향 프로그래밍의 핵심.
원하는 구조의 객체 틀을 짜놓고, 비슷한 모양의 객체를 공장처럼 찍어낼 수 있다.
객체를 매번 만들어서 사용해도 좋지만,
큰 큐모의 객체 이거나 비슷한 모양의 객체를 계속 만들어야 한다면,
class라는 설계도를 통해 효율을 낼 수 있음.
let ray = {
name: 'Ray',
price: 2000000,
getName: function() {
return this.name;
},
getPrice: function() {
return this.price;
},
applyDiscount: function(discount) {
return this.price * discount;
}
}
객체 내부에서, 해당 객체의 프로퍼티에 접근하려면 "this"라는 키워드를 사용.
인스턴스 - class를 통해 생성된 객체
class Car {
constructor(name, price) {
this.name = name;
this.price = price;
this.department = "선릉지점";
this.salesAmount = 0;
}
applyDiscount(discount) {
return this.price * discount;
}
addSales() {
this.salesAmount++;
}
}
- 객체(object)의 설계도인 클래스(class)는 문법이 비슷
- constructor 라는 생성자 함수
- class로 객체를 생성하는 과정을 '인스턴스화
벤츠라는 자동차를 등록해보자
- 인스턴스는 Class 이름에 new 를 붙여서 생성합니다.
- 클래스 이름 우측에 () 괄호를 열고 닫고, 내부에는 constructor 에서 필요한 정보를 인자로 넘겨줌.
- Car클래스의 instance를 benz 라는 변수에 저장.
- Car 클래스의 새로운 instance를 생성하려면 new 키워드가 필요.
- new 키워드는 constructor() 메서드를 호출하고 새로운 instance를 return
- 'Benz'이라는 String과 200000000 이라는 Number를 Car 생성자에 넘겨주었고, name, price 프로퍼티에 각자의 값이 할당.
const benz = new Car('Benz', 200000000);
console.log(benz);
console.log(benz.name);
console.log(benz.price);
console.log(benz.applyDiscount(0.5));
출력값
- Car {
name: 'Benz',
price: 200000000,
department: '선릉지점',
salesAmount: 0,
__proto__: {
constructor: ƒ Car(),
applyDiscount: ƒ applyDiscount(),
addSales: ƒ addSales()
}
}
- 'Benz'
- 200000000
- 100000000
메서드는 함수.
그런데 객체가 프로퍼티 값으로 갖고 있는 것을 메서드라고 함.
Class의 method는 Object(객체)의 문법과 똑같음.
다만, 객체는 프로퍼티마다 comma(,)로 구분해줘야 했지만, 클래스는 그렇지 않다.
문제 1 : MyMath 라는 class를 생성해주세요.
constructor 에서는 숫자 2개를 인자로 받아 프로퍼티로 저장합니다.
총 4개의 메서드를 구현해주세요.
getNumber : 두 개의 숫자가 무엇인지 배열로 반환하는 메서드 → ex) [1, 2]
add : 두 개의 숫자를 더하는 메서드
substract : 두 개의 숫자를 빼는 메서드
multiply : 두 개의 숫자를 곱하는 메서드
class MyMath {
constructor(num1, num2) {
this.num1 = num1;
this.num2 = num2;
}
getNumber() {
let arr = [];
arr.push(this.num1);
arr.push(this.num2);
return arr;
}
add() {
return this.num1 + this.num2;
}
substract() {
return this.num1 - this.num2;
}
multiply() {
return this.num1 * this.num2;
}
}