티스토리 뷰
같은 부모 유전자를 가진 여러 객체를 만들어내기 위해 변수와 메소드가 정의되어 있는 Class라는 틀을 사용한다.
이전에는 Constructor를 사용해서 위 기능을 구현했고, ES6에서 Class 문법이 추가되었다.
Class를 사용하면 Constructor보다 더 명확하고 깔끔한 코드를 만들 수 있다.
📌 constructor로 생성자를 만든 경우
function Person (name, age) {
this.name = name;
this.age = age;
} // 상속할 속성을 constructor에 정의
Person.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name );
} // 메서드를 prototype에 추가
const user = new Person('Jessie', 20);
console.log(user); // Person {name: 'Jessie', age: 20}
📌 위 코드를 class 문법으로 바꿔주면 이렇게 된다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log('Hello, I am ' + this.name);
}
}
const user = new Person('Jessie', 20);
class 내부에 constuctor를 만들어주고, 필요한 속성을 정의한다.
constructor 외부에 선언된 메소드는 Person.prototype에 상속 정보를 저장한 것 과 같다.
📌 getter 와 setter로 데이터 꺼내고 수정하기
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log('Hello, I am ' + this.name);
}
get nextYear() {
return this.age + 1;
}
set newAge(age) {
this.age = age;
}
}
const user = new Person('Jessie', 20);
console.log(user.nextYear); // output : 21
user.newAge = 50;
console.log(user.age); // output : 50
class에 선언하는 메소드가 내부 데이터를 꺼내 활용하거나, 데이터를 수정하는 용도라면
get set 키워드를 통해 정리해 줄 수 있다.
일반 함수의 형태로 선언해도 기능하는데는 문제가 없지만,
함수의 용도를 명확히하고, () 가 필요없어지기 때문에 직관적인 코드를 만들 수 있다.
getter로 쓰이는 get 은 데이터를 꺼내서 어떻게 출력할건지 정의하는 것이므로 return이 꼭 포함되어야 한다.
setter로 쓰이는 set 은수정 등을 위해 데이터를 넣어주는 것이므로 파라미터(한개) 설정이 꼭 필요하다.
📌 class를 상속한 class 만들기
클래스의 상속을 통해 기존에 존재하던 기능을 토대로 새로운 기능을 만들 수 있어 기능 확장이 용이해진다.
class Child extends Parent { }를 사용하면 된다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
class Student extends Person {
introduce() {
console.log('Hello, I am ' + this.name);
}
}
const girl = new Student('Jessie', 20);
console.log(girl.introduce()); // Hello teacher, I am Jessie
Student는 Person을 상속받아 만들어졌기 때문에 Person의 속성인 name을 그대로 물려받아 사용할 수 있다.
여기서 만약 Student에서 사용할 또 다른 속성을 추가하고 싶다면,
부모 클래스가 가지고있는 속성을 그대로 가져올 수 있는 super를 사용해야 한다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log('Hello, I am ' + this.name);
}
}
class Student extends Person {
constructor(name, age, subject) {
super(name, age);
this.subject = subject;
}
introduce() {
super.sayHello();
console.log('and I want to study ' + this.subject);
}
}
const girl = new Student('Jessie', 20, 'English');
console.log(girl.introduce());
// Hello, I am Jessie
// and I want to study English
super()는 부모 클래스의 constructor 에 있는 속성을 그대로 가져온다.
괄호 안에는 부모가 가지고있던 파라미터를 꼭 그대로 입력해주어야 한다.
그리고 자식 클래스의 constructor() 괄호 안에 부모 파라미터 + 자식 파라미터를 입력해준다.
부모 클래스의 매서드가 필요할때는 super.메서드이름() 으로 가져올 수 있다.
💡 참고
https://ordinary-code.tistory.com/22
https://helloworldjavascript.net/pages/270-class.html
https://ko.javascript.info/class-inheritance
'Javascript' 카테고리의 다른 글
[JS] 조건부 삼항 연산자 (Conditional operator) (0) | 2022.04.28 |
---|---|
[JS] 원하는 DOM node 잡아오기 (0) | 2022.04.03 |
[JS] Prototype 개념 정리 (0) | 2022.02.07 |
[JS] Reference data type 개념 정리 (0) | 2022.01.29 |
[JS] Spread operator (스프레드 연산자) 활용하기 (0) | 2022.01.13 |
- Total
- Today
- Yesterday
- 조건부삼항연산자
- 개념정리
- 리액트
- 구조분해할당
- Callback
- Prettier
- typescript
- callsignature
- javascript
- JSX
- Til
- destructuring
- Synchronous
- 삼항조건연산자중복사용
- JQuery
- class
- CSS
- DOM
- VSCode
- JS
- promise
- 다중조건삼항연산자
- Asynchronous
- Prototype
- ES6
- notworking
- 타입스크립트
- 생각정리
- Ternary
- scrollEvent
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |