TypeScript 객체 지향 programming

hyeyeong lee·2023년 7월 29일

Class

객체 지향 programming(Object-Oriented Programming, OOP)의 핵심 구소 요소 중 하나로 객체를 만들기 위한 틀(template)


class: 같은 종류의 객체들이 공통으로 가지는 속성(attribute)과 method를 정의
객체: class를 기반으로 생성되는 class의 instance, new keyword 사용
속성: 객체의 성질을 결정
method: 객체의 성질을 변화시키거나 객체에서 제공하는 기능을 사용



class 및 객체의 정의

TypeScript에서 class를 정의하려면 class keyword를 사용
class의 속성과 method를 정의하고, new keyword를 사용하여 객체 생성


constructor

instance를 생성하고 초기화하는 데 사용되는 method
class 내에서 constructor라는 이름으로 정의되며, 하나만 존재



class 접근 제한자

- 속성과 method에 사용

public
class 외부에서 접근 가능
접근 제한자 선언이 안되었을 때 기본으로 적용되는 접근 제한자

private
class 내부에서만 접근 가능
보통 class의 속성은 대부분 private으로 설정
class의 속성을 보거나 편집하고 싶다면 별도의 getter/setter method를 준비해놓는 것이 관례

protected
class 내부와 해당 class를 상속받은 자식 class에서만 접근 가능




상속(inheritance)

객체 지향 programming에서 class 간의 관계 정의, extends keyword 사용
super keyword는 자식 class가 부모 class를 참조하는 데 사용*


sub: super type이 필요한 곳에는 어디든 안전하게 사용
super: 필요한 곳에는 어디든 sub type을 안전하게 사용
any: 모든 것의 super type


upcasting와 downcasting

- super type, sub type으로 변환할 수 있는 type 변환 기술

upcasting
sub type → super type, 암시적으로 변환
sub type 객체를 super type 객체로 다루면 유연하게 활용 가능

downcasting
super type → sub type, as keyword로 명시적으로 변환




추상 class

	instance화를 할 수 없는 class
  • 상속을 통해 자식 class에서 method를 제각각 구현
  • 핵심 기능의 구현은 전부 자식 class에게 위임
  • abstract keyword를 사용하여 정의
  • 1개 이상의 추상 함수가 있는 것이 일반적



interface

	객체가 가져야 하는 속성과 method
  • code의 안정성을 높이고 유지 보수성을 향상
  • 단, interface를 구현한 객체는 interface를 반드시 준수


추상 class와 insterface 차이

구분구현부 제공상속 mechanism구현 mechanism
추상 classclass 기본 구현 제공단일 상속만 지원자식 class는 반드시 추상 함수 구현
interface객체의 구조만 정의다중 상속 지원interface에 정의된 method 전부 구현

추상 class ☞ 기본 구현 제공, 상속을 통한 확장
interface ☞ 특정 구조 준수 강제





객체 지향 설계 원칙 SOLID


SRP(Single Responsibility Principle, 단일 책임 원칙)

매우 기본적이고 중요한 원칙으로 class는 하나의 책임만 가져야 한다

OCP(Open-Closed Principle, 개방-폐쇄 원칙)

확장에 대해서는 열려 있어야 하고 수정에 대해서는 닫혀 있어야 한다
  • interface나 상속을 통해 확장 가능

LSP(Liskov Substitution Principle, liskov 치환 원칙)

sub type은 기반이 되는 super type을 대체할 수 있어야 한다
  • 자식 class는 부모 class의 기능을 수정하지 않고도 부모 class와 호환
  • 논리적으로 엄격한 관계 정립

ISP(Interface segregation principle, interface 분리 원칙)

해당 class에게 무의미한 method의 구현을 막자
  • interface를 필요한 만큼만 정의하고 class는 적절한 interface들을 구현하도록 유도

DIP(Dependency Inversion Principle, 의존관계 역전 원칙)

하위 수준 module(class) 보다 상위 수준 module(interface)에 의존을 해야 한다
  • Java의 Spring framework나 Node.js의 Nest.js framework와 같이 web server framework 내에서 많이 나오는 원칙

0개의 댓글