
Access Modifiers
access modifiers 는 클래스의 멤버들 즉, 클래스 속 멤버변수(property) 와 메소드에 적용될 수 있는 키워드 이다.
access modifiers 를 통해서 바깥 세상으로부터의 접근을 통제 할 수 있기 때문에 버그를 줄이고 코드에 안정성을 향상시킬 수 있다는 장점이 있다.
타입스크립트에서는 크게 3가지 접근제한자가 존재한다.
Public 과 Private 이 가장 흔히 사용된다.
class Employee {
fullName: string;
age: number;
jobTitle: string;
hourlyRate: number;
workingHoursPerWeek: number;
//
constructor(fullName:string,
age:number,
jobTitle:string,
hourlyRate: number,
workingHoursPerWeek: number) {
this.fullName = fullname;
this.age = age;
this.jobTitle = jobtitle;
this.hourlyRate = hourlyRate;
this.workingHoursPerWeek = workingHoursPerWeek;
}
//
printEmployeeDetails = (): void => {
console.log(
`${this.fullName}의 직업은 ${this.jobTitle}이고 일주일의 수입은 ${
this.hourlyRate * this.workingHoursPerWeek
}달러이다.`
);
};
}
let employee1 = new Employee();
employee1.fullName = "Park";
employee1.age = 30;
employee1.jobTitle = "주니어 개발자";
employee1.hourlyRate = 40;
employee1.workingHoursPerWeek = 35;
employee1.printEmployeeDetails();
public printEmployeeDetails = (): void => {
이렇게 public 키워드를 붙여서 직접적으로 명시 해줘도 되지만 , Java 와 C# 같은 언어 들과는 다르게 퍼블릭 멤버들을 노출 시키기 위해서 public 이라는 키워드를 클래스 내에 굳이 명시할 필요는 없다.
코드에서 아무런 access modifiers 가 명시되어 있지 않으면 그냥
"public" 이라고 생각해주면 된다.
class Employee {
private fullName: string;
age: number;
jobTitle: string;
hourlyRate: number;
workingHoursPerWeek: number;
이번에는 클래스 의 fulName 프로퍼티 앞에 private 키워드를 넣어서 클래스 외부에서 접근하지 못하도록 만들 수 있다.
이렇게 하면 에러가 메시지가 생긴다.
초기화된 객체 fullName 프로퍼티는 클래스내 private 멤버 이기 때문에 그 값은 이전과는 달리 더이상 직접적으로 접근해서는 바꿀수 없다.
뿐만 아니라 비공개 멤버인 fullName 프로퍼티의 값은 클래스 외부에서 조차 읽을 수 조차 없다.
Getter & Setter
위 처럼 비공개로 설정된 객체 멤버 변수에 접근하여 값을 읽거나 쓰기 위해서 타입스크립트에서는 Getter & Setter 라는 컨셉을 제공하고 있다.
클래스 내에서 get 과 set 키워드를 사용해서 Getter 와 Setter 를 선언 할 수 있다.
class Employee {
private _fullName: string;
age: number;
jobTitle: string;
hourlyRate: number;
workingHoursPerWeek: number;
우선 Private 멤버인 fullName 프로퍼티 앞에 _언더 스커어 를 넣어서 비공개 멤버 임을 나타내준다.
비공개 프로퍼티의 이름 앞에 밑줄을 긋는 것은 많은 언어에서 컨벤션으로 사용되고 있다.
즉, private 멤버라는 것을 나타내기 위해 표시 하는 암묵적으로 약속된 방법이라고 생각 해 주면 된다.
this._fullName = fullname;
this.age = age;
this.jobTitle = jobtitle;
this.hourlyRate = hourlyRate;
this.workingHoursPerWeek = workingHoursPerWeek;
}
//
printEmployeeDetails = (): void => {
console.log(
`${this._fullName}의 직업은 ${this.jobTitle}이고 일주일의 수입은 ${
this.hourlyRate * this.workingHoursPerWeek
클래스 내에서 멤버변수를 나타내는 fullName 앞에서 _ (underscore) 를 넣어 준다.
get fullName (){
return this._fullName;
}
.
set fullName (value: string){
this._fullName = value;
}
get fullName (){
return this._fullName;
}
set fullName (value: string){
this._fullName = value;
}
여기서 getter 와 setter 를 보면 get 과 set 키워드 뒤에 나타나는 코드 는 함수 메소드의 형태를 보여준다.
getter 와 setter 가 일반적인 클래스 메소드와 다른점은 상태를 나타낸 public 멤버 변수 들과 같은 방법으로 클래스 외부에서 getter 와 setter 에 접근이 가능하다.
Constructor 의 매개변수에 Access Modifiers 직접 적용
class Employee {
fullName: string;
age: number;
jobTitle: string;
hourlyRate: number;
workingHoursPerWeek: number;
//
constructor(fullName:string,
age:number,
jobTitle:string,
hourlyRate: number,
workingHoursPerWeek: number) {
🔽
class Employee {
constructor(
private _fullName:string,
private _age:number,
private _jobTitle:string,
private _hourlyRate: number,
public workingHoursPerWeek: number) {
이렇게 constructor 매개변수 앞에 access modifiers 를 붙여주면
access modifiers 가 사용된 constructor 매개변수는 암묵적으로 클래스의 필드 멤버 변수로 선언이 된다.
객체가 생성될때, 컨스트럭터의 매개변수로 전달된 값은, 객체의 프로퍼티 값으로 자동으로 그 값이 초기화 되고 할당된다.