본문 바로가기

TypeScript

[TypeScript] 클래스

클래스

 

클래스는 객체지향 프로그래밍 (OOP) 의 핵심 구성요소 중 하나로, 객체를 만들기 위한 틀(Template) 이다.

 

클래스의 구성요소

 

클래스에서는 같은 종류의 객체들이 공통적으로 가지는 속성(Attribute) 과 메서드(Method)를 정의한다.

 

속성 : 객체의 성질을 정의하는 것

ex) 붕어빵은 팥이란 속성이 있는 팥 붕어빵과 슈크림이라는 속성이 있는 슈크림 붕어빵이 있다.

 

메서드 : 객체의 성질을 변화시키거나 객체에서 제공하는 기능들을 사용하는 창구

ex) 붕어빵 주인은 팥 붕어빵에서 슈크림 붕어빵으로 전환할 수 있음, 붕어빵을 사는 고객들은 팥 붕어빵, 슈크림 붕어빵의 가격을 알 수 있음.

 


 

객체

 

객체란 클래스를 기반으로 생성되며 클래스의 instance 라고도 한다.

 


클래스 및 객체 정의 방법

 

TypeScript 에서 클래스를 정의하려면 class 키워드를 사용하면 된다. 클래스의 속성과 메소드를 정의하고, new 키워드를 사용하여 객체를 정의할 수 있음.

 

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    console.log(`안녕하세요! 제 이름은 ${this.name}이고, 나이는 ${this.age}살입니다.`);
  }
}

const person = new Person('Spartan', 30);
person.sayHello();

 

생성자 (constructor)

 

- 생성자는 클래스의 인스턴스를 생성하고 초기화하는데 사용되는 특별한 메서드이다.

- 생성자는 클래스 내에서 constructor 이라는 이름으로 정의된다.

- 생성자는 인스턴스를 생성할 때 자동으로 호출되며, 클래스 내에 오직 하나만 존재한다.

- 보통 생성자로 객체 속성을 초기화 하는 것 뿐 아니라 객체가 생성이 될 때 꼭 되어야 하는 초기화 로직을 넣기도 함.

ex) DBConnector 라는 클래스가 있다면, 이 클래스 타입의 객체가 생성이 될 때 생성자에서 DB연결을 미리 해주면 편함.

 


클래스 접근 제한자

 

클래스에서는 속성과 메서드에 다음과 같은 접근제한자를 사용해 접근을 제한할 수 있다.

 

public

- 클래스 외부에서도 접근이 가능한 접근 제한자

- 접근 제한자가 선언이 되지 않았다면 기본적으로 접근 제한자는 public 이다.

- 보통은 클래스의 함수 중 민감하지 않은 객체 정보를 열람할 때나 누구나 해당 클래스의 특정 기능을 사용해야 할 때 쓰임.

 

private

- 클래스 내부에서만 접근이 가능한 접근 제한자

- 보통은 클래스의 속성은 외부에서 접근할 수 없도록 대부분 private 로 접근 제한자를 설정한다.

- 클래스의 속성을 보거나 편집하고 싶으면 별도의 getter, setter 메서드를 준비해 놓는 것이 관례

 

protected

- 클래스 내부와 해당 클래스를 상속받은 자식 클래스에서만 접근이 가능한 접근 제한자

 

class Person {
  private name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public sayHello() {
    console.log(`안녕하세요! 제 이름은 ${this.name}이고, 나이는 ${this.age}살입니다.`);
  }
}

 

 

 

 

 

'TypeScript' 카테고리의 다른 글

[TypeScript] 추상 클래스  (0) 2023.07.26
[TypeScript] 상속  (0) 2023.07.26
[TypeScript] 프로젝트 세팅  (0) 2023.07.26
[TypeScript] 유틸리티 타입  (2) 2023.07.26
[TypeScript] enum 과 object literal 비교  (0) 2023.07.26