기술면접_JavaScript_11_13
## 프론트엔드 개발자 입문(비동기처리) | Callback,Promise,Async,Await ### Contents 1...
Class
Object
//1. Class declarations
class Person {
//constructor
constructor (name, age){
//field
this.name = name;
this.age = age;
}
//method
speak() {
console.log(`${this.name} : hello!`)
//this : 생성될 오브젝트
}
//2. Object
const ellie = new Person('ellie', 20)
}
Getter(획득자)
Setter(설정자)
ex. 자판기에서 음료수의 개수가 -1로 오기입 되었을 때 이를 수정하거나 오류임을 알려주는 대체값
class User{
constructor(firstName, lastName, age){
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
//Getter
get age() {
return this._age;
}
//Setter
set age(value) {
if (value <0) {
throw Error ('age can not be negative');
}
this._age = value;
//value : user가 age에 입력한 값
//age property사 오기입 되었을 때, 위와 같이 오류메시지를 출력하지 않고 아래와 같이 대체값으로 자동수정할 수도 있음
//this._age = value < 0? 0 : value
}
/*
Getter, Setter의 age변수를 _age로 설정하는 이유 :
1. Getter/Setter가 정의되면, this.age = age;는 메모리 데이터를 읽어오지 않고 Getter/Setter를 호출함
2. 1번과 같은 과정을 거치기 때문에 Setter안 this._age = value; 코드 또한 메모리의 값을 읽어오지 않고 Setter를 호출함
3. Getter, Setter의 age변수를 _age로 변경하지 않으면, Setter안에서 코드가 무한루프에 빠지게 됨
*/
const user1 = new User('Steve', 'Job', -1); // age오기입
puclie: 외부에서 접근가능
private: 클래스 내부에서만 접근가능
class Experiment {
publicField = 2;
#privateField = 0;
}
데이터와 무관하게 반복적으로 사용될 값이나 method의 경우, static을 통해 고정
class Article{
static publisher = 'Dream Coding';
contructor(articleNumber) {
this.articleNumber = altercleNumber;
}
static printPublisher() {
console.log(Article.publisher);
}
}
const article1 = new Article(1);
console.log(article1.publisher); //static은 object가 아닌 class에 할당된 것이므로 해당 코드는 오류출력
console.log(Article.publisher);
}
Inheritance(상속)
OverWriting(다양성)
class Shape {
constructor(width, height, color){
this.width = width;
this.height = height;
this.color = color;
}
draw() {
console.log(`drawing ${this.color} color of`)
}
getArea() {
return this.width * this.height;
}
}
class Rectangle extends Shape {}
//Inheritance : extends를 통해 새로운 Rectangle클래스에 기존 Shape클래스 내용을 포함
class Trianle extends Shape {
getArea() {
return (this.width * this.height / 2);
}
}
//OverWriting : 필요한 함수만 재 정의해서 사용할 수 있음.
//extends를 통해 Shape클래스 내용을 포함 후 getArea함수에서 /2 추가하여 재정의 (기존 getArea함수의 내용은 사라짐. 만약 기존 함수의 내용도 유지하고 싶다면, getArea()안에 super.getArea()를 작성하면 됨)
}
instanceOf를 통해 오브젝트가 특정 클래스의 인스턴스인지 확인
console.log(rectangle instanceof Rectangle);
//rectangle이 Rectangle class의 instance인지 확인
Procedural language(절차지향):
Object-Oreiented language(객체지향):
단점: 느린 실행속도(다수의 객체를 합한 뒤 실행해야 하므로) / 높은 개발 비용 및 시간
Avenco comes with a built-in contact form.