클래스 : 모델이 되는 청사진
인스턴스 : 청사진을 바탕으로 한 객체
이해하기 어려운 이유
클래스는 대문자로 시작, 일반명사로 만듦 (다른 함수와 구분하려고)
클래스는 함수로 정의할 수 있음
class 라는 키워드를 이용해서 정의할 수도 있음(최근문법)
class Car {
constructor(brand, name, color) {
// 인스턴스가 만들어질 때 실행되는 코드
}
}
// 여기서 함수를 생성자(constructor) 함수라고 부름
// 생성자 함수는 return 값을 만들지 않는다!!
let avante = new Car('hyeundai', 'avante', 'black');
let mini = new Car('bmw', 'mini', 'white');
let beetles = new Car('volkswagen', 'beetles', 'red');
// 각각의 인스턴스는 Car 라는 고유한 속성과, 메소드를 갖는다.
class Car {
constructor(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
}
// this에 할당한다는 것은 만들어질 인스턴스에 해당 브랜드, 이름, 색상을 부여하겠단 의미
function Car(brand, name, color) { /* 생략 */ }
Car.prototype.refuel = function() {
// 연료 공급을 구현하는 코드
}
Car.prototype.drive = function() {
// 운전을 구현하는 코드
}
⇒ 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의(es6)class Car {
constructor(brand, name, color) { /* 생략 */ }
refuel() {
}
drive() {
}
}
let avante = new Car('hyeundai', 'avante', 'black');
avante.color; // 'black'
avante.drive(); // 아반떼가 운전을 시작합니다.
let mini = new Car('bmw', 'mini', 'white');
mini.brand; // 'bmw'
mini.refuel(); // 미니에 연료를 공급합니다.
es5 방식
es6 방식 ⇒ 피그마로 범위 그리면서 위와 같이 작성해보기
let avante = new Car('hyundai', 'avante', 'black');
avante.color; // 'black'
avante.drive(); // 아반떼가 운전을 시작합니다.
let arr = ['code', 'stats', 'pre'];
arr.length; // 3
arr.push('course'); // 새 element를 추가
// 즉 배열을 정의하는 것은 Array의 인스턴스를 만들어내는 것과 동일해서 아래와 같은 방식으로도 배열을 만들 수 있음
let arr = new Array('code', 'states', 'pre');