6일차_JavaScript

9oodvibe5only·2023년 3월 22일
0
post-thumbnail

클래스 만드는 이유

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다!)

profile
재미없으면 왜 해?

0개의 댓글