클래스와 접근제어자
- TypeScript에서는 this로 접근할 수 있는 각각의 속성들은 constructor 함수가 만들어지기 전에 클래스 바디 부분에서 타입이 지정되어 있어야 한다.
- 클래스 바디: 클래스가 선언되고 중괄호가 열린 곳부터 닫히는 곳까지의 영역
- 속성 부분의 타입은 constructor 함수 위에 있는 클래스 바디 부분에 명시 해주면 된다.
- 접근 제어자 같은 경우에는 속성에서만 사용하는 것이 아니라 메서드에서도 사용가능하다.
접근제어자(Access Modifier)
public - 어디서나 자유롭게 접근 가능, 클래스 바디에서 생략 가능하다.
protected - 선언된 클래스나 해당 클래스에서 파생된 후손 클래스 내에서 접근 가능
private - 선언된 클래스에서만 접근 가능
접근 제어자를 사용하는 방법은 두 가지가 있다.
class UserA {
public first: string // public은 생략이 가능하다. 하지만 명시해주는 것도 좋은 방법.
protected last: string
age: number
constructor(first: string, last: string, age: number) {
this.first = first
this.last = last
this.age = age
}
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
class UserA {
constructor(
public first: string,
public last: string,
public age: number) {
// ...
}
// 반복해서 보면 지저분할 수 있기 때문에 위 코드를 이처럼 쓸 수 있다.
// 주의점: 매개변수에서 public을 사용할 때는 생략할 수 없다는 것
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
아래는 UserA에서 파생된 UserB를 만드는 과정이다.
class UserB extends UserA {
getAge() {
return `${this.first} ${this.last} is ${this.age}`
} // 함수 모양은 같지만, 새로 선언했기 때문에 기존에 있던 것을 덮어쓴 것.
// first : 접근 제어자가 public이기 때문에 어디에서나 사용이 가능하다.
// last : 접근 제어자가 protected이고 UserB는 UserA의 후손이기 때문에 접근 가능하다.
// age를 만약 private으로 바꾸면 에러가 발생한다.
// private 접근 제어자는 내 클래스 내에서만 사용 가능하기 때문이다.
}
const no = new UserA('critsiano', 'ronaldo', 36);
console.log(no.first);
// console.log(no.last);
// 접근 제어자가 protected이기 때문에 선언된 클래스, 혹은 그 후손 클래스 내에서만 사용 가능하다.
// 생성자 함수를 호출해서 나오는 인스턴스에서는 사용 불가
console.log(no.age);
'TYPESCRIPT' 카테고리의 다른 글
[Typescript] 타입 내보내기 (export, import) (0) | 2023.12.12 |
---|---|
[Typescript] 제네릭 (Generic) (0) | 2023.12.12 |
[Typescript] 함수 오버로딩 (Overloading) (0) | 2023.12.12 |
[Typescript] this의 타입 (0) | 2023.12.12 |
[Typescript] 타입 별칭(Type Alias) (0) | 2023.12.12 |
클래스와 접근제어자
- TypeScript에서는 this로 접근할 수 있는 각각의 속성들은 constructor 함수가 만들어지기 전에 클래스 바디 부분에서 타입이 지정되어 있어야 한다.
- 클래스 바디: 클래스가 선언되고 중괄호가 열린 곳부터 닫히는 곳까지의 영역
- 속성 부분의 타입은 constructor 함수 위에 있는 클래스 바디 부분에 명시 해주면 된다.
- 접근 제어자 같은 경우에는 속성에서만 사용하는 것이 아니라 메서드에서도 사용가능하다.
접근제어자(Access Modifier)
public - 어디서나 자유롭게 접근 가능, 클래스 바디에서 생략 가능하다.
protected - 선언된 클래스나 해당 클래스에서 파생된 후손 클래스 내에서 접근 가능
private - 선언된 클래스에서만 접근 가능
접근 제어자를 사용하는 방법은 두 가지가 있다.
class UserA {
public first: string // public은 생략이 가능하다. 하지만 명시해주는 것도 좋은 방법.
protected last: string
age: number
constructor(first: string, last: string, age: number) {
this.first = first
this.last = last
this.age = age
}
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
class UserA {
constructor(
public first: string,
public last: string,
public age: number) {
// ...
}
// 반복해서 보면 지저분할 수 있기 때문에 위 코드를 이처럼 쓸 수 있다.
// 주의점: 매개변수에서 public을 사용할 때는 생략할 수 없다는 것
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
아래는 UserA에서 파생된 UserB를 만드는 과정이다.
class UserB extends UserA {
getAge() {
return `${this.first} ${this.last} is ${this.age}`
} // 함수 모양은 같지만, 새로 선언했기 때문에 기존에 있던 것을 덮어쓴 것.
// first : 접근 제어자가 public이기 때문에 어디에서나 사용이 가능하다.
// last : 접근 제어자가 protected이고 UserB는 UserA의 후손이기 때문에 접근 가능하다.
// age를 만약 private으로 바꾸면 에러가 발생한다.
// private 접근 제어자는 내 클래스 내에서만 사용 가능하기 때문이다.
}
const no = new UserA('critsiano', 'ronaldo', 36);
console.log(no.first);
// console.log(no.last);
// 접근 제어자가 protected이기 때문에 선언된 클래스, 혹은 그 후손 클래스 내에서만 사용 가능하다.
// 생성자 함수를 호출해서 나오는 인스턴스에서는 사용 불가
console.log(no.age);
'TYPESCRIPT' 카테고리의 다른 글
[Typescript] 타입 내보내기 (export, import) (0) | 2023.12.12 |
---|---|
[Typescript] 제네릭 (Generic) (0) | 2023.12.12 |
[Typescript] 함수 오버로딩 (Overloading) (0) | 2023.12.12 |
[Typescript] this의 타입 (0) | 2023.12.12 |
[Typescript] 타입 별칭(Type Alias) (0) | 2023.12.12 |