모든 자식 object들에게 속성을 부여해주고 싶으면 필드에 변수처럼 만든다. (var, let 키워드 안씀)
class Person {
data :number = 0; // 타입지정은 꼭 하지 않아도 자동으로 되니까 지정하지 않아도 무방함
}
let person1 = new Person('ha0');
let person2 = new Person('hakoo');
person1.data = 2;
2. constructor 타입지정
js와는 다르게 constructor함수를 쓰려면 미리 필드값으로 정의해줘야한다.
필드값만으로도 지정할 수 있는데 constructor가 별도로 존재하는 이유는 파라미터를 받기 위함.
class Person {
name :string; // 필드값 미리 지정해야 this.name으로 갖다쓸수있다.
constructor(a: string) {
this.name = a;
}
}
let person1 = new Person('ha0');
let person2 = new Person('hakoo');
📌default parameter
js함수 문법 중에 있는 기본파라미터
파리미터에 값을 입력하지 않으면 자동으로 할당해주는 것으로 __파라미터=자료__로 사용한다.
활용하면 타입지정 안해도됨
class Person {
name;
constructor(a='kim') {
this.name = a;
}
}
📌rest parameter
js함수 문법 중에 있는 파라미터로 함수에 전달되는 인수들의 목록을 배열로 전달받는다. (파라미터로 무제한 입력가능)
rest parameter는 먼저 선언된 파라미터에 할당된 인수를 제외한 나머지 인수들이 모두 배열에 담겨 할당되므로, 반드시 가장 마지막 파라미터여야한다.
뭐가 얼마나 들어올지 모르므로 타입지정 안해도됨
class Word {
num :number[];
str :string[];
name :string;
constructor(nm :string, ...params) {
this.nm = nm;
this.str = [];
this.num = [];
params.forEach(p => {
if (typeof p === 'string') {
this.str.push(p)
} else if (typeof p === 'number') {
this.num.push(p)
}
})
}
}
3. methods 타입지정
class 내부에는 함수를 입력할 수 있고, 이 함수는 class의 prototype에 추가된다.
class Person {
name :string;
constructor(a :string) {
this.name = a;
}
// prototype 함수 집어넣는 부분
resetName (a: string) {
this.name = a;
}
}
let person1 = new Person('ha0');
let person2 = new Person('hakoo');
person2.resetName('ha09')
4. 접근제한자
타입스크립트를 쓰면 객체지향 언어에서 제공하는 public, private, static, protected와 같은 자바스크립트에 없는 문법도 사용가능하다.
🍓 public 키워드
public 키워드를 붙이면 모든 자식들이 이용(수정) 가능하다.
public 키워드는 생략해도 자동으로 붙는 기본 키워드
class User {
public name = 'kim';
constructor(a) {
this.name = a;
}
public 함수() {
}
}
let user = new User('park');
user.name = 'choi';
필드값을 생략하고 싶을 때도 public 키워드를 사용하면 축약가능하다.
class Person {
constructor(public name :string) {
// constructor에 들어온 파라미터는 자식의 name속성에 넣어달라는 뜻 => this.~ 생략가능
}
}
let child = new Person('ha0');
🍓 private 키워드
private키워드가 붙으면, class안에서만 수정,이용가능하다.
속성을 물려주기 싫은(보호하고 싶은) 속성들에 사용
수정되면 안되는 속성을 실수로 수정하게되는 실수를 사전에 방지한다.📌 __private속성을 class외부(자식)에서 변경하고 싶을 경우__에는 class내부에 해당 속성의 변경함수를 넣어주면 된다.
class User {
name :string;
private familyName :string = 'choi';
constructor(a) {
this.name = a + this.familyName;
}
changeFamillyName(a) {
this.familyName = a;
}
}
let user = new User('ha0'); // name = ha0choi
user.changeFamillyName('song');
🍓 protected 키워드
__private 키워드__와 마찬가지로 class 내부에서만 이용가능하며, private키워드보다 확장성을 제공한다.(class 및 하위class에서만 이용가능)
👉🏻 __protected 키워드__는 extends된 class안에서 사용가능
👉🏻 class를 extends해도 private키워드는 사용불가능
🍓 static 키워드
static의 역할은 static의 필드값을 부모만 사용가능하게(자식들이 물려받지 못하게) 하는 것이다.
class의 주요기능인 object의 복사기능을 막는 것.
하지만 extends할 경우에는 static필드값도 같이 따라옴
private/protected/public + static 으로도 사용할 수 있다.
주로 class안에 간단한 메모를 하거나, 기본 설정값을 입력하거나 class에서 생성되는 object가 사용할 필요가 없는 변수들을 만들고 싶을 때 사용한다.