ho-bolt 2021. 8. 18. 12:31

 

class person{

name;=> fields 

age;

speak(); =methods

}

 

=> class는 붕어빵의 틀 같은 것이다. 

-template

-declare once     

 

 

 

-no data in 

=> 정의만 했기 때문에 메모리에 올라가진 않는다. 

 

이 class안에 데이터를 넣어서 만든 것이 object! 

-instance of a class

-created many times

-data in 

=> 데이터를 넣었기 때문에 메모리에 올라간다. 

 

==========================================

 

1. class 선언 

 

class person{

constructor(name,age){

   this.name=name;

   this.age=age;

   }

//method

speak(){

console.log(`${this.name}:hello`);

   } 

}

=> 여기서 this란 생성자의 object, 자기 자신을 의미한다. 

2. object 만들기

 

const hojin=new person('hojin',20);

console.log(hojin.name);

=============================================

 

3. getter setter 

 

class User{
constructor(firstName,lastName,age){
    this.firstName=firstName;
    this.lastName=lastName;
    this.age=age;  =>getter를 사용한 순간 this.age는 메모리에서 값을 가져오는 것이 아니라 getter를 호출한다.  

                        => =에서는 setter를 사용한 순간 메모리가 아닌 setter를 호출한다. 

                       그래서 getter와 setter의 변수가 필드의 변수와 동일하면 스택이 찾다고 에러가 뜬다. 

                       따라서 getter와 setter에서의 변수는 조금 다르게 설정을 해주어야 한다. 

    }

   get age(){
   return this._age;
     }
    set age(value){
    this._age=value< 0 ? 0:value;
    }

}

const user1=new User('Steve','job',-1);
console.log(user1.age);

=> 사람의 나이를 -1로 설정하는 것은 말이 안됨 

이러한 실수를 줄이기 위한 것이 getter setter

 

============================================================

3. public과 private 

 

class Experiment{
publicField=2;  //외부 접근 가능
#privateField=0;  //클래스 내부엣만 접근가능 
}

============================================================

4. static 

 

class Article{
static publisher='coding';       //object가 아니라 class자체마다 할당되는 것이다. 
constructor(articleNumber){
this.articleNumber=articleNumber;
}
 static printPublisher(){
 console.log(Article.publisher);
 }

}

const article1=new Article(1);
const article2=new Article(2);
console.log(article1.publisher);  => undefined라고 출력된다. 왜냐하면 static는 object가 아닌 class자체에 붙어있기 때문이다. 

따라서 console.log(Article.publisher); 라고 쓰면 =>coding이 출력된다.

 

=>object와 상관없이 공통적으로 class에서 사용하는 것이라면 static과 static method를 사용하는 것이 메모리 사용량을 줄여줄 수 있다.  

==============================================================

 

5. 상속, 다형성 

 

 

상속: shape가 가지고 있는 속성과 메서드를 Rectangle이나 Tri이라는 다른 클래스에서 사용할 수 있는 것 

다형성: 상위의 클래스가 가지고 있는 것을 사용하되 자신의 특성에 맞게 바꾸어 사용할 수 있는 것 => 오버라이딩 

만약 부모의 메서드도 그대로 사용하고 싶다면 super.draw(); 이런식으로 사용할 수 있다. 

 

ex) 위에서 shape클래스의 getArea()메서드는 넓이를 구하는 공식이 있는데 Tri클래스에서 삼각형 구하는 공식으로 사용할 수 있다. 

======================================================================

6. instanceOf 

 

어떤 object가 해당 클래스에서 만들어진 것인지 아닌 지 판별 

console.log(rect instanceof Rectangle); => true리턴

console.log(rect instanceof object); =>true

true,false를 리턴한다. 

자바스크립트의 모든 object 클래스들은 Object를 상속받은 것이다.

 

 

 

 

728x90