클래스 만드는 이유
class TV {
name='';
price=0;
size='';
만약 100개의 티비를 팔고 싶다 그러면 이렇게 노가다 해야하나?
이때 "constructor(name,price,size) { //생성자
name=name
price=price
size=size
}
이렇게 나온다 여기서 의문점! 그럼 만약에 같은 이름이 나오면 어떻게 구분하냐?
그래서 "this" 가 나온다 /class 안에 있는 속성들한테는 여기 있는 name이야 알려주는거다.
그럼 코드가 좀 더 명료해 진다.
"constructor(name,price,size) { //생성자
this.name=name
this.price=price
this.size=size
}
지금까지 작업시설을 만들어 줬을 뿐 실제 티비를 만들지 않았다.
이제 만들러 가자~
let tv1 = new TV(name,price,size) new/새로만들어 주세요 하지만 이 TV안에는 name price size값이 들어가야 합니다.
위 코드 하나로 간단하게 만들 수 있음 5줄에서 -> 1줄로 바뀜!
확인해보자 console.log(tv1);
그럼 이제 에어컨을 만들어 보자
class AC {
name='';
price='';
type='';
}
잠시만 계속 name,price가 반복된다 너무 불편하다
이걸 해결해 보자
class Product {
name='';
price='';
}
이렇게 해결했다.
그럼 위 class를 사용해보자
class TV extents Product { //extents(확장팩) Product :Product 나 확장팩 들고 올게요 (이게 바로 상속의 개념이다)
size='';
}
class AC extents Product {
type='';
}
여기서 또 다른 문제 그럼
"constructor(name,price,size) { //생성자
this.name=name
this.price=price
this.size=size
}
이러한 생성자는 그대로 방치하냐? 답은 아닙니다.
여기서
this.name=name
this.price=price 여기에 있나요??? 없죠?!
부모인 product에 있죠
class Product {
name='';
price='';
}
그러면 어떻게 바꿔주냐
"constructor(name,price,size) { //생성자
super(name,price)
this.size=size
super-> 내 상위 클래스를 부를때 씀
그러면 여기서 한가지 추가 하고 싶어 "price"에 200만원 <-요기 글자를 넣고 싶어 "만원"이라는 글자!
그러면 이렇게 만들면 된다.
getPrice(){
return this.price + "만원";
}
호출해보자 -> console.log(tv1.getprice(), AC.name);
이러면 tv1출력하면서 돈부분에 "만원"글자 추가 됨
그리고 재미있는 상황 좀 만들어 보자
setPrice(price){
if(price<0){
throw Error("마이너스가 안됨")
}
}
tv1.setPrice() = -1000;
출력하면 에러 던지면서 마이너스 안됨
이게 캡슐화라고 불린다.---변구들과 변수에 관련된 함수들을 같은 클래스에 넣을 수 있음 패키지 처럼 쓸 수 있음
장점은 유저의 직접적 접근을 막을 수 있다.
let array = [3,2,1]
이렇게 쓰지만 사실은
let array = new Arrat(3,2,1) <-다른 관점으로 보자면 이렇게 표현이 된다
array.sort()
array.map()
우리가 항상 생각 없이 쓰는 array라는 타입도 알고보면 class라는 개채형태로 저장되어있음
그리고 그 개체 안에는 sort라는 함수가 저장이 되어있는 것!!(자바스크립트가 제공하는 class다!)