728x90
이제 Encapsulation(캡슐화)에 대하여 알아보고 이전코드에 적용하도록 해보자.
캡슐화란 클래스 내에서 수정하거나 보여서는 안될 중요한 데이터를 보호할 수 있게 만드는 개념이다.
기본적으로 class에서 선언되는 변수는 모두 public
변수인데 이 옵션외에
protected
,private
를 적용하면 클래스 내 변수가 클래스 외부 코드에서 마음대로 변경되거나 참조되는 것을 막을 수 있다.
이전코드
type Pokemon = {
name:string;
level: number;
};
const pokemonArr : Pokemon[] = [{name:'이상해꽃'
level:50},
{name:'리자몽'
level:50},
{name:'거북왕',
level;50}
];
type Party= {
pokemon : integer; //파티 포켓몬수
hasLegendary:boolean; // 전설의 포켓몬 포함여부
};
class WeakParty{
static MINIMUM_LEVEL_REQUIRED : number = 50;
pokemon : Pokemon[];
constructor(pokemon:readonly Pokemon[]){
this.pokemon = pokemon;
}
makeWeakParty(pokemon:number):Party{
if(pokemon.length()<1){
throw new Error("no pokemon to participate");
}
pokemon.forEach((item)=>{
if(item.level<WeakParty.MINIMUM_LEVEL_REQUIRED){
throw new Error("too low level");
}
})
return{
pokemon,
hasLegendary:false
}
}
}
const myParty = new WeakParty(pokemonArr);
console.log(myParty.makeWeakParty);
캡슐화를 적용한 코드
type Pokemon = {
name:string;
level: number;
};
const pokemonArr : Pokemon[] = [{name:'이상해꽃'
level:50},
{name:'리자몽'
level:50},
{name:'거북왕',
level;50}
];
type Party= {
pokemon : integer; //파티 포켓몬수
hasLegendary:boolean; // 전설의 포켓몬 포함여부
};
class WeakParty{
private static MINIMUM_LEVEL_REQUIRED : number = 50; // class level에서 생성하여 instance마다 생성을 안하기때문에 메모리 소비 감소
private pokemon : Pokemon[]; // instance level
private constructor(pokemon:readonly Pokemon[]){
this.pokemon = pokemon;
}
get pokemon(): Pokemon[]:{
return pokemon;
}
set pokemon(pokemon : Pokemon[]){
this.pokemon = pokemon;
}
public fillPokemon(pokemon : Pokemon){
if(pokemon == null) throw new Error("no pokemon to fill");
this.pokemon.push(pokemon);
}
public makeInstance(pokemon: Pokemon[]){
return new WeakParty(pokemon);
}
public makeWeakParty(pokemon:number):Party{
if(pokemon.length()<1){
throw new Error("no pokemon to participate");
}
pokemon.forEach((item)=>{
if(item.level<WeakParty.MINIMUM_LEVEL_REQUIRED){
throw new Error("too low level");
}
})
return{
pokemon.length(),
hasLegendary:false
}
}
}
//const myParty = new WeakParty(pokemonArr); // 이제 작동하지 않음
const myParty = WeakParty.makeWeakParty(pokemonArr);
console.log(myParty.makeWeakParty); // {3,false}
myParty.fillPokemon({name:'피카츄'
level:50})
console.log(myParty.makeWeakParty); // {4,false}
protected, private
- protected : 상속관계에서 자식에게까지 공유된다.
private : 해당 클래스내부까지만 공유된다 - static 변수, 일반 변수, 함수에 적용할 수 있다.
getter, setter
- 클래스내에서 private,protected 변수의 반환과 변환을 위한
get,set
함수가 있다.
'TypeScript' 카테고리의 다른 글
typescript 로 OOP 개념 익히기 - 6. Composition(구성) (0) | 2021.03.23 |
---|---|
typescript 로 OOP 개념 익히기 - 5. Polymorphism(다형성) (0) | 2021.03.20 |
typescript 로 OOP 개념 익히기 - 4. Inheritance(상속) (0) | 2021.03.20 |
typescript 로 OOP 개념 익히기 - 3. Abstraction(추상화) (0) | 2021.03.19 |
typescript 로 OOP 개념 익히기 - 1. Introduction (0) | 2021.03.19 |