: 객체 생성 후에 상태가 변하지 않는 객체
//mutable한 클래스: 포켓몬-메타몽
//메타몽은 상태를 마음대로 바꿀 수도 있음
//ex level=100인 메타몽A: metamongA.level=1 => 1로 바뀜
public class Metamong extends MutablePokmon{
public int level;
public String skill;
...
getter 그리고 setter
}
//immutable한 클래스: pokeball
//요리조리 바꿀 수 있는 메타몽을 변경 불가능하게 막아야함
public final class Pokeball{
//생성자에서 막는다고 다가 아님!
/*
Metamong metamogA = new Metagmon(100, "따라쟁이")
Pokeball speedball = new Pokeball(metamongA);
//포켓볼에 메타몽은 변경되어선 안됨.
metamongA.skill = "반사하기";
speedball.getSkill; => 반사하기
*/
private final Metamong metamong;
//생성자에 넣으려는 객체를 복제해서 넣어줌
// 메타몽A로 접근 불가하게 막음
public Pokeball(Metamong metamong){
this.metamog = new Metamong(metamong.level, metamong.skill);
}
//get으로 받아온 메타몽을 변경 -> 포켓볼의 메타몽도 변경
//포켓볼의 복제 메타몽을 보내서 접근 불가하게 막음
public getMetamong(){
return new Mutable(metamong.level, metamong.skill);
}
}