Javascript Class
Javascript Class 사용과 상속에 대해서 정리해 봅시다.
JavaScript에서 클래스는 유사한 특성과 동작을 공유하는 개체를 만들기 위한 청사진입니다. 고유한 속성과 메서드를 가질 수 있는 새로운 개체 유형을 정의하는 방법을 제공합니다.
클래스 선언 구문은 ES6에서 도입되어 개체 지향 프로그래밍 언어에서 오는 개발자에게 더 친숙한 구문을 허용합니다. . 클래스에는 인스턴스 메서드 및 정적 메서드뿐만 아니라 해당 속성의 기본값으로 객체를 초기화하는 데 사용되는 생성자가 있을 수 있습니다.
클래스는 상속을 사용하여 확장될 수 있으며, 여기서 하위 클래스는 속성을 상속할 수 있고 부모 클래스의 메소드. 이를 통해 코드 재사용이 가능하고 보다 체계적인 코드베이스를 만드는 데 도움이 됩니다.
Class Basic Syntax
클래스의 기본 생성 방법
class CarClass {
constructor() { ... } //생성자
method1() { ... } // 메소드
method2() { ... } // 메소드
}
Sample Code
class Car {
constructor(name, speed) {
this.name = name;
this.speed = speed;
}
getName() {
return this.name;
}
getMaxSpeed() {
return this.speed;
}
}
// 클래스 생성 및 호출
let mycar = new Car('sonata', 120);
console.log(mycar.getName());
console.log(mycar.getMaxSpeed());
Class의 타입과 Instance의 타입 비교
위에서 생성한 Class와 Instance의 Type의 차이를 참고 하기 바랍니다.
console.log(typeof Car); // 'function'
console.log(typeof mycar); // 'object'
console.log(Car == Car.prototype.constructor); // true
console.log(Object.getOwnPropertyNames(Car.prototype)); //전체 메소드 출력
>> (3) ['constructor', 'getName', 'getMaxSpeed']
Function 형태로 Class생성
Class는 다음과 같은 Function, prototype 형태로도 생성 할 수 있습니다.
function Car(name, speed) {
this.name = name;
this.speed = speed;
}
Car.prototype.getName = function(){
return this.name;
}
Car.prototype.getMaxSpeed = function(){
return this.speed;
}
Class Field
클래스의 필드 변수를 선언할 수 있습니다.
class Car {
engine = "gasoline";
constructor(name, speed) {
this.name = name;
this.speed = speed;
}
getName() {
return this.name;
}
getMaxSpeed() {
return this.speed;
}
getEngineType(){
return this.engine;
}
}
let mycar = new Car('sonata', 120);
console.log(mycar.getEngineType()); // gasoline
console.log(mycar.engine); // gasoline
console.log(Car.prototype.engine); // undefined
Getter and Setter
getter와 setter는 User.prototype에 정의됨.
class Car {
engine = "gasoline";
constructor(name, speed) {
this.name = name;
this.speed = speed; //speed 항목의 get/set을 적용
}
get speed(){
return this._speed;
}
set speed(value){
if(value < 0 ){
this._speed = 0;
}else{
this._speed = value;
}
}
}
let mycar = new Car('sonata', -100);
console.log(mycar.speed); // 0 응답
Class 상속 (extends)
Javascript 클래스도 상속을 지원 합니다.
class Car {
constructor(name, speed) {
this.name = name;
this.speed = speed;
}
getName() {
return this.name;
}
getMaxSpeed() {
return this.speed;
}
}
class Truck extends Car {
getLoad(){
console.log('1톤 적재 가능');
}
}
// 클래스 생성 및 호출
let mytruck = new Truck('bonggo', 100);
console.log(mytruck.getName());
console.log(mytruck.getMaxSpeed());
console.log(mytruck.getLoad()); // 1톤 적재 가능
메소드 오버라이딩
class Car {
constructor(name, speed) {
this.name = name;
this.speed = speed;
}
getName() {
return this.name;
}
getMaxSpeed() {
return this.speed;
}
}
class Truck extends Car {
getName() {
return "the new "+this.name;
}
}
let mytruck = new Truck('bonggo', 100);
console.log(mytruck.getName()); // the new bonggo
console.log(mytruck.getMaxSpeed());
super
상속 받은 하위 클래스에서 상위 부모의 메소드/생성자 접근시 super사용.
class Car {
constructor(name, speed) {
this.name = name;
this.speed = speed;
}
getName() {
return this.name;
}
getMaxSpeed() {
return this.speed;
}
}
class Truck extends Car {
constructor(name, speed) {
super(name, speed);
this.name = name;
this.speed = speed;
}
getName() {
return super.getName();
}
}