객체 지향 프로그래밍은 하나의 모델이 가정하고, 그 모델을 바탕으로 한 객체를 만드는 프로그래밍 패턴이다
노트북을 예시로 들었을 때,
클래스 (a laptop) = 막연하게 문서 작업도 할 수 있고 넷플릭스도 볼 수 있고, 아무튼 노트북이란 것!
인스턴스 (the laptop) = 브랜드는 삼성이고, 색상은 흰색이고 화면은 터치가 되는 바로 그 노트북!
// ES5
function Laptop(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
Car.prototype.bluetooth = function() {
console.log (this.name + ' 블루투스 연결');
}
// ES6
class Laptop {
constructor (brand, name, color) {
this.brand = brand; //Laptop의 브랜드 = brand(매개변수)
this.name = name; //Laptop의 이름 = name(매개변수)
this.color = color; //Laptop의 색상 = color(매개변수)
}
bluetooth() {
console.log (this.name + ' 블루투스 연결');
}
}
여기서 보이는 함수는, 객체지향 프로그래밍에서 생성자 함수라고 한다
위의 코드는 노트북 생성자를 만든 것이다
// ES5
function <생성자 이름>(a, b, c) {
this.속성1 = a;
this.속성2 = b;
this.속성3 = c;
}
<생성자 이름>.prototype.<메소드 이름> = function() {
메소드 실행문;
}
// ES6
class <생성자 이름> {
constructor(a, b, c){
this.속성1 = a;
this.속성2 = b;
this.속성3 = c;
}
<메소드 이름>() {
메소드 실행문;
}
}
🔈 클래스 = 생성자 함수 ?
자바스크립트에서는 ES6 이전에는 Class가 없기 때문에 생성자 함수가 그 역할을 대신했었지만, ES6 덕분에 우리는 위 생성자 함수를 class 문법으로 쓸 수 있게 되었다
class 부모클래스 {
constructor(변수1,변수2){
this.변수1 = 변수1;
this.변수2 = 변수2;
}
메소드(){
//기능
...
}
}
class 자식클래스 extends 부모클래스 {
constructor(변수1, 변수2, 변수3){
//super키워드로 부모클래스 생성자 호출
super(변수1,변수2);
this.변수3 = 변수3;
}
메소드2(){
//부모 클래스의 메소드 호출
super.메소드();
//추가할 자식 클래스만의 기능
...
}
}
// class 생성
class Laptop {
constructor (brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
bluetooth() {
console.log (this.name + ' 블루투스 연결');
}
}
// 인스턴스 생성 (class 사용)
let mylap = new Laptop('lg', 'gram', 'white');
let brolap = new Laptop('apple', 'macbookPro', 'silver');
변수 안에 클래스의 설계를 가진 새로운 객체, 즉 인스턴스가 할당된 모습
각각의 인스턴스는 Laptop이라는 클래스의 고유한 속성과 메소드를 가진다
🔈 메소드
객체에 딸린 함수, 즉 어떤 객체가 가지고 있는 어떤 동작을 말한다
객체의 속성에 접근하고, 그 뒤에 소괄호를 붙여 메서드를 호출할 수 있다
// 인스턴스에서 속성 사용
mylap.color; //white
brolap.brand; //apple
// 인스턴스에서 메소드 사용
mylap.bluetooth; //gram 블루투스 연결