객체 지향 프로그래밍(Object-Oriented Programming, OOP)

클래스(Class)란?

클래스 내의 변수(Variable) 종류

class Whale {
  // 인스턴스 필드 (접근 제한자 + 타입 명시)
  public gender: string = 'female';

  // 클래스 정적 필드 (공통 데이터)
  public static speciesName: string = 'Whale';

  public swimming(): void {
    // 지역 변수 (메소드 종료 시 사라짐)
    const action: string = "헤엄칩니다.";
    console.log(`${this.gender} 고래가 ${action}`);
  }
}

// 정적 필드의 경우, 인스턴스 없이 바로 접근 가능
console.log(Whale.speciesName);   // "Whale" 출력 (클래스명으로 접근)

const myWhale = new Whale();
console.log(myWhale.gender);      // "female" 출력 (인스턴스로 접근)

myWhale.swimming();

메소드 (Method)

class Calculator {
  // 인스턴스 변수
  private owner: string = "Admin";

  // 스태틱 메소드 (Static Method)
  public static addStatic(a: number, b: number): number {
    // return this.owner; // Error: 스태틱 메소드는 인스턴스 변수에 접근 불가
    return a + b;
  }

  // 인스턴스 메소드 (Instance Method)
  public add(a: number, b: number): number {
    console.log(`사용자: ${this.owner}`); // 인스턴스 변수 접근 가능
    return a + b;
  }
}

// 스태틱 메소드: 인스턴스 생성 없이 클래스명으로 바로 호출
console.log(Calculator.addStatic(5, 3)); 

// 인스턴스 메소드: 반드시 인스턴스 생성 후 호출
const calculator = new Calculator();
console.log(calculator.add(2, 3));

생성자 (Constructor)