일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Next.js
- Java
- 그리디
- 코딩테스트
- 정렬
- js
- CSS
- 이것이 코딩테스트다 with 파이썬
- 백준
- programmers
- javascript
- 알고리즘
- node.js
- CLASS
- greedy
- Baekjoon
- Typescript
- 연습문제
- 프로그래머스 JS
- 프로그래머스
- 네트워크
- 자바
- Lv2
- React
- Lv1
- SWEA
- 자바스크립트
- bfs/dfs
- 코딩테스트 입문
- Python
- Today
- Total
개발야옹
[ Javascript ] Class { ES6 (ES2015) } 본문
Class
Javascript ES6 이전까지는 비슷한 종류의 객체를 많이 만들어내기 위해 생성자를 사용해 왔으나, ES6 이후에서 Class라는 개념이 도입되면서 Class가 생성자의 기능을 대체하게 된다.
객체지향언어 ( ex : JAVA, C++ ... 등 ) 을 공부했던 사람들이라면 바로 이해하고 익힐 수 있을 것이라고 생각한다.
Class를 사용하는 가장 큰 이유는 재사용성이다.
예시로 여러 동물들에 대한 정보를 저장해야 한다고 가정할 때 동물들은 기본적으로 "name", "age"라는 속성을 갖고, "walk"라는 method를 갖는다고 가정을 한다면 동물마다 하나하나 해당 속성을 정의하게 되면 동물의 수가 적을 경우에는 간단할 수 있지만 100마리, 1000마리, 10000마리 ... 를 정의한다고 가정하면 매우 시간이 많이 들고 코드의 수가 길어지며 가독성이 떨어질 수 있다.
이렇게 속성이 중복되는 경우 하나의 Class로 해당 속성들을 정의하면 코드가 훨씬 짧아질 뿐만아니라, 가독성 또한 상승된다.
아래 코드가 그 예시이다.
class Animal {
constructor(name, age) {
this.name = name;
this.age = age;
this.position = 0;
}
Walk() {
this.position += 1;
}
}
const Rabbit = new Animal("토끼",3);
const Dog = new Animal("개",2);
console.log(Rabbit);
Rabbit.Walk();
console.log(Rabbit.position);
console.log(Dog);
console.log 출력 값
Class 기본 문법
Class 생성하기
class 생성하는 것은 간단하다. class 다음에 만들고자 하는 class 이름을 입력한 후 중괄호로 닫아주면 된다.
class "className" {
}
let classTest = new "className"();
console.log(classTest);
// console.log 결과 "className" {}
Class 초깃값 설정
class의 초깃값은 constructor라는 생성자를 이용하여 설정할 수 있다. class 내부에는 한 개의 constructor만 존재할 수 있으며, 2개 이상 선언 시 아래와 같은 Syntax Error가 발생한다.
Uncaught SyntaxError: A class may only have one constructor
class Animal {
constructor( name , age , position ) {
this.name = name;
this.age = age;
this.position = position;
}
}
const Rabbit = new Animal("rabbit",2,5);
console.log(Rabbit);
// Animal { name : "rabbit", age : 2, position : 5 }
Class method 생성/사용
class의 method는 function 형식으로 만들어 준다. 해당 메서드를 사용할 경우 " 객체가 담긴 변수명.메소드() " ( Rabbit.Walk() ) 형식으로 호출 가능하다.
class Animal {
constructor( name , age , position ) {
this.name = name;
this.age = age;
this.position = position;
}
Walk(){
this.position += 1;
}
}
const Rabbit = new Animal("rabbit",2,5);
console.log(Rabbit);
// Animal { name : "rabbit", age : 2, position : 5 }
Rabbit.Walk();
Rabbit.Walk();
console.log(Rabbit);
// Animal { name : "rabbit", age : 2, position : 7 }
class내부에서 메소드를 정의하는 것이 아닌 class 외부에서도 메소드 정의가 가능하다. 그러나 class 자체에 추가하는 것이 아닌 class 객체를 담고 있는 변수에서 추가하는 것이기 때문에 해당 변수외의 또 다른 Animal class 객체를 담고 있는 변수의 경우 외부에서 정의한 메소드 사용이 불가능하다.
아래 코드를 참고하여 보자.
class Animal {
constructor( name , age , position ) {
this.name = name;
this.age = age;
this.position = position;
}
Walk(){
this.position += 1;
}
}
const Rabbit = new Animal("rabbit",2,5);
Rabbit.Jump = function(){
return `${this.name} jump`
}
console.log(Rabbit);
// Animal { name : "rabbit", age : 2, position : 5 }
Rabbit.Walk();
console.log(Rabbit.Jump()); // rabbit jump
console.log(Rabbit);
// Animal { name : "rabbit", age : 2, position : 6 }
extends 상속
class에는 상속이라는 개념을 사용할 수 있다. 예제를 보면 더 쉽고 빠르게 이해할 수 있을 것이다.
상속받은 class의 속성, method를 모두 사용할 수 있다.
class Animal {
constructor( name , age , position ) {
this.name = name;
this.age = age;
this.position = position;
}
Walk(){
this.position += 1;
}
}
class Rabbit extends Animal {
Jump(){
console.log("Rabbit Jump");
}
}
class Dog extends Animal {
Bark(){
console.log("Wang Wang!");
}
}
const dog = new Dog("meonzy",3,10);
const rabbit = new Rabbit("tosun",2,9);
dog.Bark();
dog.Walk();
rabbit.Jump();
rabbit.Walk();
super 키워드
super 키워드를 사용하여 자식 class에서 부모 class를 호출할 수 있다. 주로 constructor에서 많이 사용한다.
class Animal {
constructor( name , age , position ) {
this.name = name;
this.age = age;
this.position = position;
}
Walk(){
this.position += 1;
}
}
class Rabbit extends Animal {
constructor(name, age, position, jumpSkill){
super(name,age,position);
this.jumpSkill = jumpSkill;
}
Jump(){
console.log(`Rabbit ${this.jumpSkill} jump`);
}
}
class Dog extends Animal {
Bark(){
console.log("Wang Wang!");
}
}
const dog = new Dog("meonzy",3,10);
const rabbit = new Rabbit("tosun",2,9,"100%);
dog.Bark();
dog.Walk();
rabbit.Jump();
rabbit.Walk();
참고 :
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes
'Language > Javascript' 카테고리의 다른 글
[ Javascript ] async/await (0) | 2022.03.07 |
---|---|
[ Javascript ] Promise (0) | 2022.03.06 |
[ Javascript ] Set Object (0) | 2022.01.11 |
[ Javascript ] Map Object (0) | 2022.01.11 |
[ Javascript ] Array.prototype.includes() (0) | 2022.01.11 |