2021. 4. 9. 11:38ㆍ기술/디자인 패턴
테이블이 CharacterTable과 EnemyTable으로 나누어져 있습니다.
캐릭터 테이블과 적 테이블을 나누는 이유는 컬럼이 다를 수 있고
플레이어 캐릭터의 HP와 적 캐릭터의 HP의 수치가 다를 수 있으므로 나눕니다.
ID, HP 등등의 변수가 존재합니다.
ChataerTable, EnemyTable의 현재 구조가 상위 클래스에서 상속받아 구현할 수 없는 설계상황입니다.
그러므로
ICharacterDataAdapter 인터페이스를 만들고
{
public uint ID();
}
PlayerData : ICharacterDataAdapter
{
CharacterTable Data;
public uint ID() { return Data.ID; }
}
EnemyData : ICharacterDataAdapter
{
EnemyTable Data;
public uint ID() { return Data.ID; }
}
이렇게 데이터 얻기 클래스를 만들면 여러 코드에서 PlayerType과 EnemyType을
if 문이나 switch 문으로 따로 얻지 않아도 되는 장점이 있습니다.
설계구조와 코드가 깔끔해 집니다.
의사코드로 몇 라인만 작성해 두었는데 실제 코드는 위에서 얻는 변수량이 많습니다.
그걸 다 if 문이나 switch 문으로 사용하면 코드가 많이 복잡해지겠죠.
정확히 아답터 패턴이라고 할 수 있을지 모르겠지만
아답터 패턴에서 아이디어를 얻어서 설계를 수정하였습니다.
UML 포함해서 더 자세한 설명을 할 수 있으나 경험담 공유 정도로 하겠습니다.
필요하신 분은 생각해 보시고 적용해 보세요.