클래스(Class)

라용·2022년 8월 12일
0

인프런 강의 자바스크립트 중급 - 코딩앙마 를 듣고 정리한 내용입니다.

비슷한 형태의 객체를 만들기 위해 생성자 함수를 사용했습니다.

const User = function (name, age) {
	this.name = name;
	this.age = age;
	this.showName = function() {
		console.log(this.name);
	};
};

const mike = new User("Mike", 30)

ClassES6 에 추가된 스펙으로 위 생성자 함수의 같은 역할을 합니다. 위 생성자 함수를 Class 를 활용해서 다시 써보면,

class User2 {
	constructor(name, age) {
		this.name = name;
		this.age = age;
	}
	showName() {
		console.log(this.name);
	}
}

const tom = new User2("Tom", 19);

class 내부에는 객체를 만들어 주는 생성자 메소드 constructor 가 있습니다. 이 생성자 메소드에 포함되지 않은 값은 객체 내부가 아닌 프로토타입에 저장됩니다. class 로 객체를 만들 때 new 없이 실행하면 에러가 발생해서 알려줍니다. 생성자 함수를 위 class 처럼 동작하게 하려면 아래처럼 수정해야 합니다.

const User = function (name, age) {
	this.name = name;
	this.age = age;
};

User.prototype.showName = function() { // 프로토타입으로 따로 저장해주어야
		console.log(this.name);
}

const mike = new User("Mike", 30);

생성자 함수에서 상속을 프로토타입으로 구현했다면, class 에서는 extends 로 구현합니다.

class Car {
	constructor(color) {
		this.color = color;
		this.wheels = 4;
	}
	drive() {
		console.log("drive..");
	}
	stop() {
		console.log("stop..");
	}
}

class Bmw extends Car {
	park() {
		console.log("park");
	}
}

const z4 = new Bmw("blue");

위 코드에서 z4 를 확인하면 Car 클래스에서 선언한 color wheels 가 있고, 프로토타입을 보면 park() 가 있고, 그 아래 상속으로 drive() stop() 이 있습니다.

메소드 오버라이딩 method overriding 을 알아보면,

class Car {
	constructor(color) {
		this.color = color;
		this.wheels = 4;
	}
	drive() {
		console.log("drive..");
	}
	stop() {
		console.log("stop..");
	}
}

class Bmw extends Car {
	park() {
		console.log("park");
	}
	stop() {  // 이렇게 중복되는 함수를 추가한다면 어떨까?
		console.log("off..") ;
	}
}

const z4 = new Bmw("blue");

이럴 경우 z4.stop()stop 이 아니라 off 를 출력합니다. 동일한 이름의 메소드가 있다면 상속받기 전 단계에 있는 값을 사용합니다.부모의 메소드를 사용하고 싶다면 super 를 사용합니다.

생성자 constructo 오버라이딩을 해보면

class Car {
	constructor(color) {
		this.color = color;
		this.wheels = 4;
	}
	drive() {
		console.log("drive..");
	}
	stop() {
		console.log("stop..");
	}
}

class Bmw extends Car {
	constructor(color) {
		super(color); 
      // 이렇게 super 써서 부모 요소처럼 빈 객체 생성하고 시작해야 함, 매개변수 color 도 그대로 입력
		this.navigation = 1;
	}
	park() {
		console.log("park");
	}
}

const z4 = new Bmw("blue");

기본적으로 자식요소에 constructor 을 써주지 않으면, 우리 눈에 보이지 않게 실행되지만, 위와 같이 입력을 한다면 super 를 사용하고 매개변수도 입력해주어야 한다.

profile
Today I Learned

0개의 댓글