TypeScript를 쓰면 JavaScript에 없는 문법도 사용이 가능하다. 객체지향 언어에서 제공하는 public, private, static, protected 키워드를 사용이 가능하다.
🖥️ Public
TypeScript에서 public 키워드는 클래스의 멤버(속성 또는 메서드)를 외부에서 접근 가능하도록 지정하는 접근 제어자(access modifier) 중 하나이다. 클래스의 멤버는 기본적으로 'public' 으로 설정되어 있으므로, 'public' 키워드를 명시적으로 사용하지 않아도 된다. 그러나 명시적으로 사용하면 코드의 가독성을 높일 수 있다.
class User {
public name: string;
constructor(){
this.name = 'kim';
}
}
let user = new User();
user.name = 'park'; //가능
public이 붙은 속성은 자식 object들이 마음대로 사용하고 수정이 가능하다.
🖥️ Private
private 키워드는 TypeScript에서 사용되는 접근 제어자 중 하나로, 해당 멤버(속성 또는 메서드)에 대한 접근을 클래스 내부에서만 허용하도록 지정한다. 외부에서는 접근할 수 없다.
class User {
public name :string;
private familyName :string;
constructor(){
this.name = 'kim';
let hello = this.familyName + '안뇽'; //가능
}
}
let user = new User();
user.name = 'park'; //가능
user.familyName = 456; //에러남
private 이 붙은 속성은 수정이 불가능해진다. private이 붙은 속성들은 오직 class { } 안에서만 수정이 가능해진다.
📌 private 가 부여된 속성을 class 밖에서 수정해야할 경우
1. private 속성을 수정하는 함수를 class안에 만든다.
2. 함수를 실행시킨다.
class User { public name :string; private familyName :string; constructor(){ this.name = 'kim'; let hello = this.familyName + '안뇽'; } changeSecret(){ this.familyName = 'park'; } } let user = new User(); user.familyName = 'park'; //에러남 user.changeSecret() //가능
prviate는 개발을 하다보면 외부에서 실수로 수정하지 않도록 지켜주는 것이다. 그리고 private를 쓰면 함수를 만들어서 수정해야해서 약간의 안전장치를 더해서 개발이 가능하다.
🖥️ Protected
protected 키워드는 TypeScript에서 클래스 멤버의 접근 수준 중 하나로, 해당 멤버는 해당 클래스와 그것을 상속 받은 하위 클래스에서만 접근할 수 있다. 즉, 외부에서는 접근할 수 없고, 상속 관계에서만 사용이 가능하다.
class User {
protected x = 10;
}
class NewUser extends User {
doThis(){
this.x = 20;
}
}
User를 extends 하는 NewUser class를 만들었다. NewUser가 갑자기 this.x 로 x를 가져다 쓰려고 하면 x가 private 속성일 경우엔 에러가 나지만 x가 protected 속성일 경우엔 에러가 나지 않는다.
그래서 class를 여러개 만들 때 class 끼리 공유할 수 있는 속성을 만들고 싶으면 protected를 쓰면 된다.
🖥️ Static
static 키워드는 클래스의 인스턴스가 아닌 클래스 자체에 속한 멤버(속성 또는 메서드)를 나타낸다. 이러한 멤버는 클래스의 인스턴스를 생성하지 않고도 직접 접근할 수 있다. 주로 class 안에 간단한 메모를 하거나, 기본 설정값을 입력하거나 class로 부터 생성되는 object가 사용할 필요가 없는 변수들을 만들어놓고 싶을 때 사용한다.
class User {
static skill = 'js';
intro = User.skill + ' 전문가입니다';
}
// 철수 인스턴스 생성
var 철수 = new User();
console.log(철수);
// 출력: User { intro: 'js 전문가입니다' }
// User 클래스의 static skill 속성을 변경
User.skill = 'python';
// 민수 인스턴스 생성
var 민수 = new User();
console.log(민수);
// 출력: User { intro: 'python 전문가입니다' }
'👨💻 TypeScript' 카테고리의 다른 글
TypeScript - React + Typescipt (0) | 2024.03.17 |
---|---|
TypeScript - TypeScript Generics (0) | 2024.03.04 |
TypeScript - TypeScript never type (0) | 2024.03.04 |
TypeScript - rest parameter / destructuring (0) | 2024.03.02 |
TypeScript - 타입스크립트 Interface (2) | 2024.02.28 |