클래스 기반 객체지향 언어에서 지원하는 접근 제한자(Access modifier)를 뜻 한다.
기본적으로 따로 명시하지 않으면 TypeScript에서는 그동안 Public으로 지정됐을 것이다.
1. 정의
Public : TypeScript Class 기본 접근 제한자, 선언 시 해당 멤버는 해당 Class 내부/외부에서 모두 접근이 가능하다.
Private : 선언 시 해당 멤버는 해당 Class "내부"에서만 접근이 가능하다. (외부 접근 불가)
Protected : 선언 시 해당 멤버에 대한 접근을 Class 내부 및 상속한 하위(자식)클래스에서만 접근허용
특징
static : ES6 클래스에서 Static Method를 의미한다.
Static 멤버는 클래스 자체에 연결되어 클래스의 모든 인스턴스가 공유하는 속성이나 메서드이다.
정적메소드는 Class의 instance가 아닌 Class 이름으로 호출된다.
static 키워드는 부모에서만 사용가능한 변수를 만드는 것이다. 자식에게 물려주고 싶지 않은 변수에는 static을 적용하면 된다.
2. 예시
Public, Private 예시
class Car {
name = 'Tesla';
//private 속성을 선언하면 data의 변경은 불가능해지만, 데이터를 조회는 가능하다.
private BrandName :string = 'KIA';
constructor(a : string) {
//constructor로 만드냐 결과는 같지만 cons는 파라미터 지정이 가능해
//새로운 오브젝트를 뽑을때 파라미터 지정가능
this.name = a;
}
public Namechange(){
this.BrandName = 'Hyundai';
}
}
let company = new Car('Hyundai')
company.name // 수정가능 public
company.BrandName // 수정불가함 오류발생 private
//수정하려면 미리 내부 함수를 만들고 함수를 사용해서 밖에서 수정한다.
company.Namechange();
console.log(company);
public 키워드를 쓰면 this. 생략이 가능하다.
class Test {
constructor(public name :string) {
}
}
let a = new Test('K');
static 예시
//예시 1. static 데이터 상속시키기
class tire {
//static을 쓰면 부모만 사용가능하며, 자식에게 상속되지 않는다.
//하지만 extends를하면 static 붙은것도 상속이 된다. static은 public 등과 동시 사용가능
static size = '24 inch';
}
class Car extends tire {
//Car 는 tire를 상속했기 때문에 size 데이터를 이용/수정이 가능함
model = 'sonata';
color = 'gray';
tire = Car1.size;
}
let Car_data = new Car();
console.log(Car_data);
//예시 2. Static 데이터 수정하는 법 ( 그리고 기타 특징)
class Attacker {
name = 'Sombra'
left = 'Shoot';
right = 'Hacking';
//shift는 자식에게 전달되지 않는다.
static shift = 'Virus';
e = 'Translocator';
q = 'EMP';
}
Attacker.shift = ('Stealth'); // static 데이터는 다음과 같이 수정이 가능하다.
var 솜브라 = new Attacker();
//따라서 조회 시 shift 데이터는 출력되지 않는다.
console.log(솜브라);