만약 고양이를 프로그래밍한다면...
고양이의 속성: 털 색깔(까맣다,하얗다) / 귀(짧다, 길다) / 체형(뚱뚱, 날씬) / 성격(활발, 소심)
고양이의 행위: eat, sleep, cry, grooming, play, run, hide...
const Cat = function(name) {
this.name = name;
}
Cat.prototype.sleep = function() {};
const Yatong = new Cat('Yatong');
코드를 재수정하지 않고 재활용하기 위해서 기능과 특성의 모음을 "클래스"라는 "캡슐"에 분류해서 넣는것
let color = 'white';
let char = 'active'
let age = 3;
function getCatInfo(color, char, age) {
return `${color} cat is ${char} and ${age} years old.`;
⬇️
let myCat = {
color: 'white',
char: 'active',
age: 3,
getInfo: function() {
return `${this.color} cat is ${this.char} and ${this.age} years old.`;
}
};
myCat.getInfo();
부모클래스의 속성과 기능을 그대로 사용할 수 있고, 필요에 따라서는 자식클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있는 특성
extends
클래스 선언식이나 표현식에서 새로운 자식 클래스를 만들 때 사용하는 키워드
class Father {
weight: 70,
height: 175,
age: 35,
gender: 'male'
}
class Son extends Father {
weight: 30,
height: 135,
age: 11,
gender: 'male'
}
내부 구조는 매우 복잡하지만 실제 사용은 매우 간단하게 할 수 있게 설계하는 것
ex) 여권(한 사람의 개인 정보가 들어있지만 생년월일, 국가, 성별 등 여행에 필요한 최소한의 신원정보만 담은 데이터)
하나의 변수(함수)명이 상황에 따라 다른 의미로 해석될 수 있다.
오버라이딩(Overriding)과 오버로딩(Overloading)이 가능하다.