1
- //접근 제한자(Access modifier) - public, private, protected / es6에서는 접근 제한자를 지원하지 않았다 하지만 ts에서는 제공해준다.
2
-
3
- abstract class Car {
4
- color : string ;
5
- constructor ( color : string ) {
6
- this . color = color ;
7
- }
8
- start ( ) : void {
9
- console . log ( "start" ) ;
10
- }
11
- abstract doSomething ( ) : string ; //아무 작업을 하지 않은 추상 함수 상속받은 클래스에 해당 함수가 없다면 error 발생
12
- }
13
-
14
- // const Car = new Car("red"); //-> error : 추상클래스는 new 인스턴스로 생성할 수 없다. 추상클래스는 청사진과 같다고 생각하며 된다. 따라서 오로지 상속을 통해서만 가능하다.
15
-
16
- class Bmw extends Car {
17
- constructor ( color : string ) {
18
- super ( color ) ;
19
- // 참고로 'super()'는 부모(일반적인 super가 아님)의 constructor에 접근
20
- }
21
- // abstract doSomething()가 없다면 class는 error, 즉, 추상 클래스는 상속을 받은 쪽에서 해당 함수를 사용해야 한다.
22
- doSomething ( ) : string {
23
- // alert("do!"); //-> error : alert는 browser에서만 사용이 가능
24
- console . log ( "do!" ) ;
25
- return 'Do!' ;
26
- }
27
- // - private: 부모 name이 private인 경우 error가 나온다. 추가적으로 '#name'은 private로 인식한다.
28
- // - protected: 부모 name이 protected인 경우 정상 동작한다. 그렇다면 public과 차이는 무엇인가.
29
- /*
30
- * new를 통해서 인스턴스 했을 경우 접근을 제한하게 된다. 즉, 자식 클래스에서는 부모 속성에 접근을 할 수 있으나 new 인스턴스인 경우 접근이 불가하다.
31
- */
32
- // - readonly: new 인스턴스를 통해서 값을 변경할 수 없다. 그렇다면 어떻게 해야 변경을 할 수 있을까?
33
- /*
34
- * 부모 constructor 내부에서 작업을 해야한다.
35
- */
36
- // - static: static은 정적 맴버 변수(property)를 만들어 줄 수 있다. static에 접근을 하기 위해서는 this가 아닌 class 이름으로 접근을 해야 한다.
37
- // - abstract: abstract은 추상 클래스(class) 또는 함수, 변수를 만들어 준다.
38
- }
39
-
40
- const z4 = new Bmw ( "black" ) ;
41
- console . log ( z4 . doSomething ( ) ) ; //undefined가 출력되는 이유 : doSomething의 반환 값이 void이기 때문이다.
1
+ // NonNullable<T> : NonNullable은 Null과 undefined를 제외한 타입을 생성한다.
2
+ // -- data.interface 참조
3
+ import {
4
+ GradeType , ScoreType , User
5
+ } from "./utils/data.interface"
0 commit comments