Generics 타입은 아무거나 될수 있다고 생각하면된다. 

 

https://velog.io/@yena1025/%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-keyof%EC%99%80-typeof

 

타입스크립트의 keyof와 typeof

최근에 진행 중인 [Effitizer 프로젝트](https://github.com/Effitizer)에서 기존에 작성된 코드를 분석하던 중에 `as keyof typeof`라는 표현을 발견했다. 작성하신 개발자 분에게 직접 여쭤보고 다음과 같은 내

velog.io

https://yamoo9.gitbook.io/typescript/classes/getter-setter

 

게터 / 세터 - TypeScript Guidebook

비공개로 설정할 필요가 있는 속성을 private로 설정한 후, 이 속성에 접근하여 값을 읽거나, 쓰기 위한 Getter, Setter 함수를 사용하여 속성을 정의할 수 있습니다.

yamoo9.gitbook.io

 

 

what is oop?

객체지향은 코드에서 실제와 유사한 엔터디를 사용하는것

코드애서 실제 사물과 최대한 유사한 객체를 사용해 코드를 이해하기 쉽게 만드는것 

 

로직을 분리하여 각 로직을 관리하는것이 객체이다. 

 

- object (객체 ) : 코드에서 너가 일하는거 

- classes : object 의 blueprint  (이론적으로) :객체가 어떤것을 저장하고 어떤 메서드를 가지는지 

정의하고 클래스를 기반으로 객체를 생성한다. 

 

인스턴스화 한다. 

하나의 클래스를 기반으로 동일한 구조를 가지는 객체를 어려개 사용할수 있다. 

Constructor()

클래스를 기반으로 생성된 객체에 연결되는 함수이다.

객체가 생성될 실행 / 생성하는 객체의 초기화 작

 

 

This() 키워드

클래스로 생성된 인스턴스를 참조 

인스턴스의 프로퍼티와 메서드를 엑세스할수 있다

 

const account= {describe: accounting.describe}

 

1)

accounting. describe() ==>undeifiend

 

accounting.descibe 메서드를 descibe: 가 참조하고 있는 포인터이다. 

하지만 실행하는것은 아니므로 undeifend

 

2)

this 키워드는 호출한 함수를 참조한다. 

따라서 

const accoungingcopy= {descirbe: accounting.describe}에서 

describe는 accounting 을 참조하는게 아니라 호출한 객체를 참조하므로 

accoungingcopy.descibe() 에서   

accoungingcopy을 참조하고  accoungingcopy 는 name 속성이 없다. 

따라서 에러가 발생한다. 

 

 

3) 따라서 

 

this 키워드를 매개변수에 넣는다. 

this  매개변수는 실제로 전달해 주어야 하는 매개변수는 아니다. 

 

this에 뭘 명시해야되는지 알려줘야된다. 따라서 

descirbe(this: DEpartement) 

라고 작성하면 this.name 의 this 가 항상 department 클래스의 객체를 참조한다. 

 

따라서 이제는 

 

에서 에러가 발생한다. 

 

만약 

 

이렇게 name 을 넣으면 이제는 에러가 발생하지 않는다. 

 

 

외부에서 엑세스 하는거 막기

클래스외부에서 employees 를  직접 엑세스 하는것을 막아야된다.

 

따라서 private 를 사용한다. 

 

초기화

 

 

construcotr 에서 타입 지정하고 private/. public 인지도 지정한다. 

 

읽기 전용 속성

한번 선언하면 두번다시 못바꾸게하는거 == readonly 이다. 

static 메소드 & 속성

-  클래스를 인스턴스화 하지 않고 사용할수 있는 정적 메서드

 

 

class  내부에 함수 선언시 static 을 붙인후 

외부에서 접근할때 class( 이름). 함수 이름 으로 접근이 가능하다. 

이전에는 new class 를 통해 인스턴스를 생성후 들어갔지만 static 정적 메소드를 사용하면 가능하다. 

즉 전역변수 라고 생각하면 쉽다. 

 

 

전역 변수로도 사용가능하다. 

fisyear 를 선언한다. 이때 static 붙어줘야됨

 

이렇게 접근가능

this 키워드 접근 안됨 인스턴스와 별개로 사용된다. 

접근할수 없다. 

클래스에서 접근할려면  Department. fiscalyear 이라고 적어야된다.

 

추상클래스 

코드를 작성하는 개발자가 특정 클래스를 상속받을대 특정 메소드를 구현하게한다.

특정 메소드를 오버라이드 하도록 강제시킨다. 

 

상속하는 부서마다 함수 사용이 다를수 있으니 이때 추상클래스를 사용하면좋다. 

 

 

이때 class 에도 abstrct 를 붙어야된다 

 

싱글톤

클래스의 객체를 여러개 생성하지 않고 하나만 생성하는것

 

constructor 에 private 를 선언한다. 

 

하면 이렇게 error 메세지가 나온다. 

따라서 이렇게 인스턴스화 하면 안된다는것을 알수 있다., 

 

그럼 어떻게 접근하는가?

 

이 private static 변수를 통해 접근한다. 

 이렇게 함수를 선언한후 , 변수가 존재하면, 이 변수를 return  하고 아니며 ㄴ

이변수에 인스턴스화 시킨다. ! 

 

const accounting= AccountingDepartment.getInstace()

 

첫번째 인터페이스

인터페이스는 객체의 구조를 정의합니다.

 

 

 interace 으로 선언한다음 타입을 맞춰준다. 

객체의 구조가 인터페이스의 구조와 일치하는지 타입을 확인할수 있다. 

 

type 으로 사용할수도 있지만 interface 로 사용하는 이유는 

객체의 구조를 정의해야되기 때문이다.

 

쉼표를 이용하여 여러개 interface 를 사용할수 있는것도 장점이다. 

 

 

 

추상클래스에서는 class 를 사용해서 이미 만들어놓은 함수들도 사용할수 있었지만

itnerface 는 선언만 되어있기 대문ㅇ에 구현된것을 사용할수 없다. 

 

인터페이스 사용방법

 

extend 를 통해 확장 시킬수 있다. 

 

선택적 매개변수 & 속성  '? ' 사용

 

클래스에 이 프로퍼티가 있을수도 있고 없을수도 있다는 의미