728x90
-Class
(Javacsript에서도 ES6부터 클래스 형태를 제공해 사용할 수 있다.)
리액트를 하다보면 사용할 수 도 있는 기능이지만 클래스 자체를 깊게 이해할 정도의 필요는 없다!
어떻게 작동하는지에 대해서만 이해하도록 하자.
class Baseball {
constructor(name, position) {
this.name = name;
this.position = position;
}
}
Baseball 이라는 클래스를 작성했고, 생성자를 통해 name 과 position을 전달해 Baseball에서 사용할수 있도록 했다.
this는 이 클래스(Baseball)을 의미한다.
Baseball Class를 어떻게 사용할 수 있을까?
const player = new Baseball("Park", "1st");
console.log(player);
const player = new Baseball("Park", "1st"); console.log(player);
new라는 키워드, 그리고 constructor의 파라미터로 전달했던 속성값들을 함께 전달하면
name: Park, position: 1st 를 갖는 Baseball 객체가 player라는 이름으로 생성된다.
constructor(생성자)는 Class를 생성할 때 필요한 것들을 가지고 있다.
확장 가능한 Class
class Baseball {
constructor(name, position) {
this.name = name;
this.position = position;
}
}
class Play extends Baseball {
pitch() {
console.log("pitch");
}
}
const myPlay = new Play("Kim", "SS");
console.log(myPlay);
새로운 클래스 Play는 extends 라는 키워드를 통해 Baseball의 속성을 그대로 사용할 수 있다.
따라서 Baseball과 마찬가지로 name, position 속성을 파라미터로 전달받았고 그 출력결과는 위와 같다.
또한, Play 내부에서 정의한 pitch 메서드도 사용할 수 있다.
const myPlay = new Play("Kim", "SS");
console.log(myPlay.pitch()); // pitch
위에서 말했듯, Play는 Baseball의 속성을 그대로 사용한다.
class Play extends Baseball {
pitch() {
console.log("pitch");
}
sayWhatAmI() {
console.log(`I am ${this.name}, ${this.position}`);
}
}
const myPlay = new Play("Kim", "SS");
console.log(myPlay.sayWhatAmI()); //I am Kim, SS
여기서의 this는 Baseball을 상속받은 Play를 의미한다.
728x90
'React [클론코딩 학습일지]' 카테고리의 다른 글
1.7 Array Function - filter (0) | 2021.06.03 |
---|---|
1-6. Array function - map (0) | 2021.06.01 |
1-4. Spread Operator (스프레드 연산자) (0) | 2021.05.30 |
1-3. 객체 비구조화 할당(Object Destructuring) (0) | 2021.05.26 |
1-2. Template Literal(템플릿 리터럴) (0) | 2021.05.24 |