본문 바로가기
프로그래밍/TypeScript

타입스크립트 클래스

by hi-rachel 2023. 10. 23.

클래스

자바스크립트의 클래스 소개

/**
 * 클래스
 */

let studentA = {
  name: "이정환",
  grade: "A+",
  age: 27,
  study() {
    console.log("열심히 공부 함");
  },
  introduce() {
    console.log("안녕하세요!");
  },
};

class Student {
  // 필드
  name;
  grade;
  age;

  // 생성자
  constructor(name, grade, age) {
    this.name = name;
    this.grade = grade;
    this.age = age;
  }

  // 메서드
  study() {
    console.log("열심히 공부 함");
  }

  introduce() {
    console.log(`안녕하세요! ${this.name}입니다!`);
  }
}

// 파생 클래스 상속 이용
class StudentDeveloper extends Student {
  // 필드
  favoriteSkill;

  // 생성자
  constructor(name, grade, age, favoriteSkill) {
    super(name, grade, age);
    this.favoriteSkill = favoriteSkill;
  }

  // 메서드
  programming() {
    console.log(`${this.favoriteSkill}로 프로그래밍 함`);
  }
}

const studentDeveloper = new StudentDeveloper("이정환", "B+", 27, "TypeScript");
console.log(studentDeveloper);
studentDeveloper.programming();

// 클래스를 이용해서 만든 객체 -> 인스턴스
// student 인스턴스
let studentB = new Student("이정환", "A+", 27);
console.log(studentB);
studentB.study();
studentB.introduce();

타입스크립트의 클래스

/**
 * 타입스크립트의 클래스
 */

const employee = {
  name: "이정환",
  age: 27,
  position: "developer",
  work() {
    console.log("work work");
  },
};

class Employee {
  // 필드
  name: string;
  age: number;
  position: string;

  // 생성자
  constructor(name: string, age: number, position: string) {
    this.name = name;
    this.age = age;
    this.position = position;
  }

  // 메서드
  work() {
    console.log("work work");
  }
}

class ExecutiveOfficer extends Employee {
  // 필드
  officeNumber: number;

  // 생성자
  constructor(
    name: string,
    age: number,
    position: string,
    officeNumber: number
  ) {
    super(name, age, position);
    this.officeNumber = officeNumber;
  }
}

const employeeB = new Employee("이정환", 27, "개발자");
console.log(employeeB);

const employeeC: Employee = {
  name: "",
  age: 0,
  position: "",
  work() {},
};

접근 제어자

/**
 * 접근 제어자
 * access modifier
 * => public / private / protected
 */

class Employee {
  // 필드 (앞에 public 생략된 것 => 접근 가능)
  name: string;
  // protected => 외부 접근 x, 파생 클래스 내부에서 접근 o
  protected age: number;
  // private => 외부 접근 x, 파생 클래스 내부에서도 접근 x
  private position: string;

  // 생성자
  constructor(name: string, age: number, position: string) {
    this.name = name;
    this.age = age;
    this.position = position;
  }

  // 메서드
  work() {
    console.log("work work");
  }
}

const employee = new Employee("이정환", 27, "developer");
employee.name = "정환";
console.log(employee);

class Employee2 {
  // 생성자에 접근 제한자를 달아줄 경우 자동으로 생성되므로 필드 부분은 생략해야 함, 값 초기화도 자동
  constructor(
    public name: string,
    private age: number,
    protected position: string
  ) {}

  // 메서드
  work() {
    console.log("work work");
  }
}

const employee2 = new Employee2("이정환", 27, "developer");
employee2.name = "정환";
console.log(employee2);

인터페이스와 클래스

/**
 * 인터페이스와 클래스
 */

// Interface는 무조건 public 필드만 정의 가능
interface CharacterInterface {
  name: string;
  moveSpeed: number;
  move(): void;
}

class Character implements CharacterInterface {
  constructor(public name: string, public moveSpeed: number) {}

  move(): void {
    console.log(`${this.moveSpeed} 속도로 이동!`);
  }
}

[참고]

한 입 크기로 잘라먹는 타입스크립트

  • Section 6. 클래스 강의를 듣고 정리한 내용입니다.

'프로그래밍 > TypeScript' 카테고리의 다른 글

타입 조작하기  (0) 2023.10.24
타입스크립트 제네릭  (0) 2023.10.23
타입스크립트 인터페이스  (0) 2023.10.23
타입스크립트 함수와 타입  (0) 2023.10.18
타입스크립트 이해하기  (0) 2023.10.18