Class객체 지향 programming(Object-Oriented Programming, OOP)의 핵심 구소 요소 중 하나로 객체를 만들기 위한 틀(template)
class: 같은 종류의 객체들이 공통으로 가지는 속성(attribute)과 method를 정의
객체: class를 기반으로 생성되는 class의 instance, new keyword 사용
속성: 객체의 성질을 결정
method: 객체의 성질을 변화시키거나 객체에서 제공하는 기능을 사용
TypeScript에서 class를 정의하려면 class keyword를 사용
class의 속성과 method를 정의하고, new keyword를 사용하여 객체 생성
constructorinstance를 생성하고 초기화하는 데 사용되는 method
class 내에서 constructor라는 이름으로 정의되며, 하나만 존재
- 속성과 method에 사용
public
class 외부에서 접근 가능
접근 제한자 선언이 안되었을 때 기본으로 적용되는 접근 제한자
private
class 내부에서만 접근 가능
보통 class의 속성은 대부분 private으로 설정
class의 속성을 보거나 편집하고 싶다면 별도의 getter/setter method를 준비해놓는 것이 관례
protected
class 내부와 해당 class를 상속받은 자식 class에서만 접근 가능
객체 지향 programming에서 class 간의 관계 정의, extends keyword 사용
super keyword는 자식 class가 부모 class를 참조하는 데 사용*
sub: super type이 필요한 곳에는 어디든 안전하게 사용
super: 필요한 곳에는 어디든 sub type을 안전하게 사용
any: 모든 것의 super type
- super type, sub type으로 변환할 수 있는 type 변환 기술
upcasting
sub type → super type, 암시적으로 변환
sub type 객체를 super type 객체로 다루면 유연하게 활용 가능
downcasting
super type → sub type, as keyword로 명시적으로 변환
instance화를 할 수 없는 class
abstract keyword를 사용하여 정의 객체가 가져야 하는 속성과 method
| 구분 | 구현부 제공 | 상속 mechanism | 구현 mechanism |
|---|---|---|---|
| 추상 class | class 기본 구현 제공 | 단일 상속만 지원 | 자식 class는 반드시 추상 함수 구현 |
| interface | 객체의 구조만 정의 | 다중 상속 지원 | interface에 정의된 method 전부 구현 |
추상 class ☞ 기본 구현 제공, 상속을 통한 확장
interface ☞ 특정 구조 준수 강제
매우 기본적이고 중요한 원칙으로 class는 하나의 책임만 가져야 한다
확장에 대해서는 열려 있어야 하고 수정에 대해서는 닫혀 있어야 한다
sub type은 기반이 되는 super type을 대체할 수 있어야 한다
해당 class에게 무의미한 method의 구현을 막자
하위 수준 module(class) 보다 상위 수준 module(interface)에 의존을 해야 한다