#1 Language πŸ‘„/1-3 Typescript

[Typescript] 클래슀 & μΈν„°νŽ˜μ΄μŠ€

FillByCoding 2023. 12. 23. 16:27
private : μƒμ„±λœ 객체 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•œ 속성
protected : privateκ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ privateκ³Ό λ‹€λ₯Έ 점은 이 ν΄λž˜μŠ€μ—μ„œλΏ μ•„λ‹ˆλΌ 이 클래슀λ₯Ό ν™•μž₯ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œλ„ μ‚¬μš© κ°€λŠ₯ 함
readonly ν‚€μ›Œλ“œ
  • μ΄ˆκΈ°ν™” 쀑에 ν•œ 번만 μ‚¬μš© κ°€λŠ₯
  • νŠΉμ • 속성이 μ΄ˆκΈ°ν™” 되고 λ‚˜λ©΄ μ΄ν›„μ—λŠ” λ³€κ²½λ˜μ–΄μ„œλŠ” μ•ˆλ¨
  • 좔가적인 νƒ€μž… μ•ˆμ „μ„±μ„ 더해주고 μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•΄μ€Œ
  • 약식 μ΄ˆκΈ°ν™”
// μ΄ˆκΈ°ν™” 약식 μ „

class Department {
  private id: string;
  private name: string;
  private employees: string[] = [];

  constructor(id: string, name: string) {
    this.id = n;
    this.name = n;
  }
}

// μ΄ˆκΈ°ν™” 약식 ν›„

class Department {
  private employees: string[] = [];

  constructor(private readonly id: string, public name: string) {
  }
}
// μ΄ˆκΈ°ν™” 약식 μ „

class Product {
  title: string;
  price: number;
  private isListed: boolean;
 
  constructor(name: string, pr: number) {
    this.title = name;
    this.price = pr;
    this.isListed = true;
  }
}

// μ΄ˆκΈ°ν™” 약식 ν›„

class Product {
  private isListed: boolean;
 
  constructor(public title: string, public price: number) {
    this.isListed = true;
  }
}
this ν‚€μ›Œλ“œ
  • this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 무언가λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 superλ₯Ό λ¨Όμ € ν˜ΈμΆœν•΄μ•Ό 함
getter / setter
  • λ‘œμ§μ„ μΊ‘μŠν™”ν•˜κ³  속성을 μ½κ±°λ‚˜ μ„€μ •ν•˜λ € ν•  λ•Œ
  • μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” 좔가적인 λ‘œμ§μ„ μΆ”κ°€ν•˜λŠ”λ° μœ μš©ν•¨
정적 λ©”μ„œλ“œ & 속성
  • 정적 λ©”μ„œλ“œ: 클래슀λ₯Ό 기반으둜 μƒμ„±λœ 객체가 μ•„λ‹ˆλΌ ν΄λž˜μŠ€μ—μ„œ 직접 ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ
  • 정적 속성과 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀의 μΈμŠ€ν„΄μŠ€μ—μ„œ μ ‘κ·Όν•  수 μ—†λŠ”
  • 속성과 λ©”μ†Œλ“œλ₯Ό ν΄λž˜μŠ€μ— μΆ”κ°€ν•  수 있음
  • 클래슀 이름을 λ¨Όμ € ν˜ΈμΆœν•˜μ§€ μ•Šκ³  ν΄λž˜μŠ€μ— 직접 μ ‘κ·Ό
  • 주둜 λ…Όλ¦¬μ μœΌλ‘œ κ·Έλ£Ήν™”ν•˜κ±°λ‚˜ ν΄λž˜μŠ€μ— λ§€ν•‘ν•˜λ €λŠ” μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ‚˜
  • ν΄λž˜μŠ€μ— μ €μž₯ν•˜κ³ μž ν•˜λŠ” μ „μ—­ μƒμˆ˜μ— μ‚¬μš© 됨
  • λ©”μ†Œλ“œ μ•žμ— static ν‚€μ›Œλ“€λ₯Ό μΆ”κ°€ν•΄ λ‹€μŒ 객체λ₯Ό λ°˜ν™˜
static createEmployee(name: string) {
    return { name: name };
  }

const employee1 = Department.createEmployee("Yumi");
console.log(employee1);
  • 정적 속성은 μΈμŠ€ν„΄μŠ€μ—μ„œ μœ νš¨ν•˜μ§€ μ•ŠμŒ
  • 정적 속성과 정적 λ©”μ†Œλ“œμ˜ 전체적인 κ°œλ…μ€ μΈμŠ€ν„΄μŠ€μ™€ λΆ„λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έ
  • κ·Έλž˜μ„œ this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μ ‘κ·Όν•˜λŠ” 건 λΆˆκ°€λŠ₯
좔상 클래슀
  • 좔상 클래슀 : μΈμŠ€ν„΄μŠ€ν™”λ  수 μ—†κ³  ν™•μž₯λ˜μ–΄μ•Ό ν•˜λŠ” 클래슀
  • λ©”μ†Œλ“œ μ•žμ— abstractκ°€ μžˆλŠ” λ©”μ†Œλ“œκ°€ ν•˜λ‚˜ 이상이라면
  • ν•΄λ‹Ή 클래슀 μ•žμ—λ„ abstractλ₯Ό μΆ”κ°€ ν•΄μ•Ό 함
abstract class Department {
  static fiscalYear = 2022;
  //   private id: string;
  //   private name: string;
  protected employees: string[] = [];

  constructor(protected readonly id: string, public name: string) {
    // this.id = n;
    // this.name = n;
  }

  abstract describe(this: Department): void;

}
  • 좔상 ν΄λž˜μŠ€λŠ” 일뢀 μƒμœ„ 클래슀λ₯Ό 기반으둜 ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€κ°€
  • 일뢀 곡톡 λ©”μ†Œλ“œ λ˜λŠ” 속성을 κ³΅μœ ν•˜λŠ” 경우 μ‚¬μš©
  • abstract ν‚€μ›Œλ“œλ‘œ ν‘œκΈ°λœ ν΄λž˜μŠ€λ“€μ€ 자체적으둜 μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†μŒ
싱글톀 & 개인 μƒμ„±μž
static getInstance() {
// 이미 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§€κ³  μžˆλ‹€λ©΄ 이λ₯Ό λ°˜ν™˜
    if (AccountingDepartment.instance){
      return this.instance
    } // κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μƒˆ μΈμŠ€ν„΄μŠ€λ₯Ό 생성
    this.instance = new AccountingDepartment('d2',[])
    return this.instance
  }

// AccountingDepartment의 μƒˆ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜
const accounting = AccountingDepartment.getInstance();
const accounting2 = AccountingDepartment.getInstance();
  • 싱글톀 : “new”둜 μƒμ„±ν•˜μ§€ μ•Šκ³  λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ κ΅¬μ„±ν•˜λ―€λ‘œ νŠΉμ • μ‹œμ μ— λ°˜λ“œμ‹œ
  • 단 ν•˜λ‚˜μ˜ 클래슀 μΈμŠ€ν„΄μŠ€κ°€ 쑴재
μΈν„°νŽ˜μ΄μŠ€
  • 객체의 ꡬ쑰λ₯Ό μ„€λͺ…함
  • ꡬ체적인 값이 μ•„λ‹Œ ꡬ쑰만 있음
interface Person {
  name: string;
  age: number;

  greet(phrase: string): void;
}
  • 인수의 이름과 νƒ€μž…, λ©”μ†Œλ“œμ˜ λ°˜ν™˜ νƒ€μž… μˆœμ„œ
interface Person {
  name: string;
  age: number;

  greet(phrase: string): void;
}

let user1: Person;

user1 = {
  name: "yum",
  age: 20,
  greet(phrase: string) {
    console.log(phrase + "" + this.name);
  },
};

user1.greet("Hi there - I am ");
  • μΈν„°νŽ˜μ΄μŠ€ 내에 readonly μ œμ–΄μžλ„ μΆ”κ°€ κ°€λŠ₯
  • ν•˜μ§€λ§Œ public, private 등은 μ§€μ • λΆˆκ°€λŠ₯
  • ν•¨μˆ˜μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ”λ°μ—λ„ μ‚¬μš© κ°€λŠ₯
선택적 λ§€κ°œλ³€μˆ˜ & 속성
interface Named {
  readonly name?: string;
  outputName?: string
}
클래슀, μΈν„°νŽ˜μ΄μŠ€ 차이점
  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†μœΌλ©° μ»΄νŒŒμΌλ˜μ§€ μ•ŠλŠ” 반면,
  • ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”ν•  수 있으며 컴파일 됨
LIST