Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 싸피 합격
- 세마포어란?
- floyd-warshall
- Proxy
- 웹 호스팅
- 세마포어와 뮤텍스의 차이
- 세마포어
- 플로이드 워셜
- 호스팅이란?
- Proxy Server
- 프록시
- 다익스트라
- Dijkstra Algorithm
- 클라우드 서버
- 프록시서버
- 삼성 청년 SW 아카데미
- 싸피
- 호스팅
- 세마포어와 뮤텍스
- Synchronization
- 다익스트라 알고리즘
- 뮤텍스
- 플로이드 와샬
- 서버 호스팅
- 최단 경로
- SSAFY
- 싸피 면접 후기
- 뮤텍스란?
- 동기화
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[자바스크립트] Class vs Object 본문
class는 ES6에 도입되었다.
1. Object 생성
'usr strict';
class Person{
// constructor
constructor(name, age){
//field
this.name = name;
this.age = age;
}
speak(){
console.log(`${this.name}: hello`);
}
}
const goo = new Person('goo',28);
console.log(goo.name);
console.log(goo.age);
goo.speak();
2. Getter & Setter
class User {
constructor(firstName, lastName, age){
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age() {
return this.age;
}
set age(value) {
this.age = value;
}
}
const user1 = new User('goo', 'kang', -1);
console.log(user1.age);
- 위의 코드 같이 적는다면 보이는 결괏값처럼 에러가 난다.
- age라는 getter를 정의하는 순간 생성자에 this.age는 메모리에 올라간 데이터를 읽는 것이 아니라 get age()를 실행하게 된다.
- 그리고 setter를 정의하는 순간 =age; 값을 할당할 때 this.age에 할당하는 것이 아니라 setter를 호출하게 된다.
다시 value를 this.age에 할당할 때 setter를 실행하게 되면서 무한정 방지된다. - 따라서 조금 다르게 _를 붙여서 사용해야 한다.
class User {
constructor(firstName, lastName, age){
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age() {
return this._age;
}
set age(value) {
this._age = value;
}
}
const user1 = new User('goo', 'kang', -1);
console.log(user1.age);
3. Public & Private
- 최근에 추가 된 것이라 많은 자바스크립트 개발자가 쓰고 있지는 않다.
class Experiment{
publicField = 2;
#privateField = 0;
}
const experiment = new Experiment();
console.log(experiment.publicField);
console.log(experiment.privateField);
- 그냥 publicField처럼 정의하면 외부에서 접근이 가능하다.
- '#'을 붙이게 되면 private 하게 된다. 클래스 내부에서는 읽고 쓰기가 가능하지만 외부에서는 안된다.
4. Static
- 객체를 new로 생성할 때마다 새로운 객체가 생성되고 안에 값도 다르다.
- 하지만 static을 사용한 것은 그 class 자체에 붙어있다.
class Article{
static publisher = 'goo';
constructor(articleNumber){
this.articleNumber = articleNumber;
}
static printPublisher(){
console.log(Article.publisher);
}
}
const artcle1 = new Article(2);
const artcle2 = new Article(1);
console.log(Article.publisher) // 출력값 goo
Article.printPublisher(); // 출력값 goo
- Object에 상관없이 들어오는 값 상관없이 공통적으로 사용할 경우 static을 작성해서 메모리의 사용을 줄여준다.
5. 상속 & 다양성
class Shape {
constructor(width, height, color){
this.width = width;
this.height = height;
this.color = color;
}
draw(){
console.log(`drawing ${this.color}`)
}
getArea(){
return this.width * this.height;
}
}
class Rectangle extends Shape {}
class Triangle extends Shape {
draw(){
super.draw();
console.log("tria");
}
getArea(){
return (this.width * this.height) /2;
}
}
const rectangle = new Rectangle(20,20,'blue');
rectangle.draw();
console.log(rectangle.getArea());
const triangle = new Triangle(20,20,'red');
triangle.draw();
console.log(triangle.getArea());
- 상속을 통해 재사용성을 높힐 수 있다.
- 오버 라이딩해서 재 정의해서 사용할 수 있다.
- 재정의를 했는데 부모의 메서드를 쓰고 싶다면 super를 사용하면 된다.
6. Class Checking : instanceOf
console.log(rectangle instanceof Rectangle); // true
console.log(triangle instanceof Rectangle); // false
console.log(triangle instanceof Triangle); // true
console.log(triangle instanceof Shape); // true
console.log(triangle instanceof Object); // true
출처
'공부 > JavaScript && jquery' 카테고리의 다른 글
[자바스크립트] 스코프 체인 (0) | 2021.04.20 |
---|---|
[자바스크립트] 실행 컨텍스트 개념 (0) | 2021.04.20 |
[자바스크립트] Arrow Function은 무엇이고 this 스코프 차이 (0) | 2021.04.20 |
var, let, const에 대해서 (0) | 2021.04.19 |
use strict 순수 바닐라 자바스크립트에서 쓰자! (0) | 2021.04.19 |
Comments