비슷한 특징을 가진 객체를 생성하기 위한 템플릿이라고 할 수 있다. 자바스크립트에서도 존재하지만 완전히 똑같은 코드로 클래스를 생성하는 것은 아니다.
class Student {
constructor(name) {
this.name = name;
}
}
자바스크립트는 클래스 내에 인스턴스 변수를 굳이 선언해줄 필요가 없다. 클래스 내부의 생성자에서 this를 통해 인스턴스에 동적으로 추가가 된다.
class Student {
name: string;
constructor(name: string) {
this.name = name;
}
}
하지만 타입스크립트 정적 언어기 때문에 클래스 내에 인스턴스 변수를 선언해주어야 한다. 클래스를 생성하는 방법은 위와 같다.
const student = new Student('John');
클래스를 기반으로 객체를 생성하기 위해서는 new
키워드를 통해 객체를 생성해야 한다. 그 후 클래스 내부에 실행하고 싶은 메서드가 있다면 생성된 객체에 접근하여 클래스 내부의 메서드를 실행시킨다.
class Employee {
empName: string;
age: number;
empJob: string;
constructor(name: string, age: number, job: string) {
this.empName = name;
this.age = age;
this.empJob = job;
}
printEmp(): void {
console.log('이름 : ' + this.empName);
console.log('나이 : ' + this.age);
console.log('직업 : ' + this.empJob);
}
}
const emp = new Employee('John', 30, 'Developer');
emp.printEmp();
이건 클래스를 기반으로 객체를 생성하고 클래스 내부의 메서드에 접근하여 출력하는 코드의 예시다. 실행을 해보면 아래와 같이 잘 실행이 되는 것을 확인할 수 있다.
자바를 해 본 사람이라면 아주 익숙한 접근 제어자가 타입스크립트에도 존재한다! 자바랑은 다르게 패키지라는 개념이 없어 default 키워드는 제외가 되었고, 그래서 기본 제어자가 public으로 설정된다고 한다. 즉, 우리가 접근 제어자 없이 코드를 작성하면 기본적으로 모두 public으로 설정된다고 보면 된다.
접근 제어자에는 public
, private
, protected
가 존재한다. 뭔가 단어에서부터 느껴지겠지만 public은 어디서든 접근할 수 있는 제어자, private은 내 클래스 내에서만 접근이 가능하고, protected는 내 클래스를 상속한 자식 클래스 내까지만 접근이 가능하다.
public
접근 제어자public
접근 제어자는 언제 어디서든 접근할 수 있다. 클래스 외부에서도 언제든지 접근이 가능하다.
private
접근 제어자private 접근 제어자는 클래스 내부에서만 접근이 가능하다. name 변수는 private으로 선언했고, 이름을 출력하는 printName은 public으로 선언을 했다. name 변수는 같은 클래스 내부에서 접근이 가능하기 떄문에 클래스 내의 printName에서 사용했을 때는 에러가 발생하지 않지만, 클래스 외부에서 접근하려고 하면 에러가 발생하는 것을 볼 수 있다.
protected
접근 제어자protected 접근자를 먼저 Person3 클래스 내부에 선언을 한다. 위에서도 이야기했듯 protected 접근 제어자는 해당 클래스를 상속한 자식 클래스 내에까지만 접근이 가능하다. 따라서 Person3을 상속한 Student 클래스 내에서는 protected 제어자로 선언한 name 변수에 접근할 수 있다. 하지만 클래스 외부에서 선언하려고 하면 에러가 발생하는 것을 볼 수 있다. 또한 printName도 접근할 수 없다는 에러가 발생하는 것을 볼 수 있다.