어댑터 패턴 소개
래퍼 패턴이라고도 하는 어댑터 패턴은 호환되지 않는 두 인터페이스 간의 간격을 연결하여 기존 코드를 변경하지 않고 함께 작동할 수 있도록 합니다. 이 패턴은 소스 코드를 변경하지 않고 기존 클래스를 다른 클래스와 함께 작동시키려는 경우 매우 유용합니다.
어댑터 패턴에 대한 실제 비유는 전원 어댑터입니다. 소켓과 호환되지 않는 플러그가 있는 경우 플러그를 소켓에 원활하게 연결할 수 있는 어댑터를 사용합니다. 어댑터 패턴은 코드에서 호환되지 않는 클래스 또는 인터페이스에 대해 동일한 작업을 수행합니다.
Unity의 어댑터 패턴
어댑터 패턴이 어떻게 작동하는지 설명하기 위해 Player 클래스와 Enemy 클래스가 있는 게임을 생각해 보십시오. 둘 다 공격할 수 있지만 다른 방법을 사용합니다. Player는 Shoot 방법을 사용하고 Enemy는 Fire 방법을 사용합니다.
csharpCopy code
public class Player
{
public void Shoot()
{
Debug.Log("Player is shooting...");
}
}
public class Enemy
{
public void Fire()
{
Debug.Log("Enemy is firing...");
}
}
여기서 문제는 Player와 Enemy가 사용하는 일관되지 않은 공격 방법입니다. 이상적으로는 모든 캐릭터가 동일한 '공격' 방법을 사용하는 표준 인터페이스를 원합니다.
여기에서 어댑터 패턴이 작동합니다. ICharacter 인터페이스와 이 인터페이스를 구현하는 EnemyAdapter 클래스를 만들어 봅시다:
csharpCopy code
public interface ICharacter
{
void Attack();
}
public class EnemyAdapter : ICharacter
{
private Enemy _enemy;
public EnemyAdapter(Enemy enemy)
{
this._enemy = enemy;
}
public void Attack()
{
_enemy.Fire();
}
}
이 예에서 EnemyAdapter는 ICharacter 인터페이스와 Enemy 클래스를 연결합니다. EnemyAdapter에서 Attack이 호출되면 Enemy에서 Fire 메서드를 트리거하여 Player에서 사용하는 Attack 인터페이스와 정렬합니다.
이 설정을 테스트하기 위해 Player 및 EnemyAdapter 개체를 인스턴스화하고 해당 Attack 메서드를 호출합니다.
csharpCopy code
public class Test : MonoBehaviour
{
void Start()
{
Player player = new Player();
player.Shoot();
Enemy enemy = new Enemy();
ICharacter enemyAdapter = new EnemyAdapter(enemy);
enemyAdapter.Attack();
}
}
어댑터 패턴을 적용하여 서로 다른 초기 구현에도 불구하고 단일 ICharacter 인터페이스에서 Player 및 Enemy 클래스를 표준화했습니다.
마무리
게임 개발에서 어댑터 패턴은 보다 유지 관리 가능하고 유연하며 일관된 코드를 작성하기 위한 강력한 도구가 될 수 있습니다. 원래 구현을 조정하지 않고 호환되지 않는 클래스를 협력하게 만드는 프로세스를 간소화합니다.
'Unity > Design Pattern' 카테고리의 다른 글
Unity로 이해하는 상태 패턴 (State Pattern) (0) | 2023.08.09 |
---|---|
Unity로 이해하는 옵저버 패턴 (Observer Pattern) (0) | 2023.08.08 |
Unity로 이해하는 팩토리 패턴 (Factory Pattern) (0) | 2023.08.07 |
Unity로 이해하는 전략 패턴(Strategy Pattern) (0) | 2023.07.20 |
Unity로 이해하는 싱글톤 패턴 (Singleton Pattern) (0) | 2023.03.20 |