class
class CartJS {
constructor(user){
this.user = user;
this.store{};
}
put(id, product){
this.store[id] = product;
}
get(id){
return history.store[id];
}
}
js에서 class 사용할 경우
상속클래스 (extends 사용)
interface User {
name: string;
}
interface Product {
id: string;
price: string;
} //인터페이스
class Cart {
public user: User; //인터페이스 클래스에 들고오기
protected user1: User; // 이것도 인스턴스에서 접근할 수 없음 but 차이점은 다른 클래스에 상속할 경우
private store: object; // 이렇게 프라이빗으로 정의하면 인스턴스와 상속된 클래스에서 모두 접근할 수 없음
constructor( protected user1: User, private store: object = {}){ // 이렇게 접근제한자랑 매개변수의 타입을 같이 정의할 수 있고, 기본 값을 줄수도 있음
// this.user = user; - 위처럼 정의하면 이거 작성안해도됨 (이 class에 그냥 할당됨)
// this.store = {};
}
public put(id: string, product: Product){
this.store[id] = product;
}
get(id: string){
return this.store[id];
}
}
class PromotionCart extends Cart { //클래스 상속받기
addPromotion(){
this.user //protected의 경우 상속클래스에서 사용가능
this.store // private는 상속에서도 못씀
}
}
class PromotionCart extends Cart { //클래스 상속받기
public - 모두 접근 가능
protected - 인스턴스 접근 X / 상속클래스 접근 O
private - 인스턴스와 상속된 클래스에서 모두 접근 X
클래스에서 인터페이스를 구현(implements 사용)
interface Person {
name: string;
say(message: String): void;
}
interface Programmer {
writeCode(requirment: string ): string;
}
//클래스에서 인터페이스를 구현하는 방법
class KoreanProgrammer implements Person, Programmer{ //다중 인터페이스를 구현한 새로운 타입 korean
constructor(public name: string){
}
say(): void {
console.log('hi');
}
writeCode(requirment: string): string {
console.log(requirment);
return requirment + '.....';
}
loveKimchi(){
console.log('love~kimchi~');
}
}
//코리안은 펄슨이라는걸 보장..
//class 이름에 호버해서 문제해결> person 인터페이스 구현 누르면 say까지 자동으로 만들어줌
const ony = new KoreanProgrammer('ony');
abstract class 추상 클래스
완성이 되지않은 클래스, 바로 instance 만들 수 없지만, 다른 상속을 받은 클래스를 통해서 instance만들 수 있음
abstract class Korean implements Person { //추상으로 정의하면 - 상속해야 instance 사용함
public abstract jumin: number;
constructor(public name: string){
}
say(msg: string){
console.log(msg);
}
abstract loveKimchi(): void; // 안에서 이렇게 추상 정의하기
}
class KoreanProgrammer2 extends Korean implements Programmer{ //인터페이스 Programmer 구현 + 추상 클래스인 Korean 상속받기
// Korean 에서 정의한 추상00들을 하위클래스인 KoreanProgrammer2여기서 정의내려야함
constructor(public name: string, public jumin: number){
super(name); //부모클래스 Korean (super)의 생성자(name) 를 호출 해줘야함 !
}
say(): void {
console.log('hi');
}
writeCode(requirment: string): string { //implements한 Programmer에 내장된 매서드도 구현해야함
console.log(requirment);
return requirment + '.....';
}
loveKimchi(): void{
console.log('love~kimchi~');
}
}
const ony2 = new KoreanProgrammer2('ony',2222); // 추상클래스의 하위타입은 만들 수 있음
const ony3 = new Korean('ony'); //오류남 추상 클래스는 instance 만들 수 없음