[TIL-260123] Adapter Pattern

데비·2026년 1월 23일

본과정

목록 보기
39/64

오늘 배운 내용

- 어댑터 패턴


어댑터 패턴(Adapter Pattern)

  • 기존의 코드를 변경시키지 않으면서도 다형성을 접목해 여러 객체들을 다룰 수 있도록 한다.
  • 다른 디자인패턴과 마찬가지로 구현 코드에 집중하기보다는 패턴의 본질에 집중하고, 다양한 방식을 구현될 수 있음을 인지 해야한다.

- 장점

  • 기존 코드를 수정하지 않기 때문에 해당 코드가 변경 불가능하거나 업데이트 될 때에도 대응할 수 있다.
  • 최소한의 변경으로 기존 코드를 재사용 할 수 있다.

- 단점

  • 약간의 성능 저하가 발생한다.(미비한 성능의 저하)

- 사용하면 좋은 경우

  • 기존 코드가 변경 불가능하거나, 업데이트를 통해 기존 코드의 내용 변경이 우려될 때
  • 레거시 코드임에도 해당 코드를 사용하는것이 효율적일 때
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonsterManager : MonoBehaviour
{
   [SerializeField] private Zombie _zombie;
   [SerializeField] private Alien _alien;

   private List<IMonster> _monsters = new List<IMonster>();

   public void Start()
   {
       _monsters.Add(new ZombieAdapter(_zombie));
       _monsters.Add(new AlienAdapter(_alien));

       foreach (var mon in _monsters)
       {
           mon.Attack();
       }
   }
}

▲ 몬스터 매니저

public class Zombie : MonoBehaviour
{
   public void Bite()
   {
       Debug.Log("Zombie 물기");
   }
}

▲ 좀비

public class Alien : MonoBehaviour
{
   public void Shoot()
   {
       Debug.Log("Alien 발사");
   }
}

▲ 외계인

public interface IMonster
{
   public void Attack();
}

public abstract class Adapter<T> : IMonster
{
   protected T Adaptee;

   public Adapter(T t)
   {
       Adaptee = t;
   }

   public abstract void Attack();
}

public class ZombieAdapter : Adapter<Zombie>
{
   public ZombieAdapter(Zombie z) : base(z)
   {
   }

   public override void Attack()
   {
       Adaptee.Bite();
   }
}

public class AlienAdapter : Adapter<Alien>
{
   public AlienAdapter(Alien a) : base(a)
   {
   }

   public override void Attack()
   {
       Adaptee.Shoot();
   }
}

▲ 어뎁터 패턴의 활용

0개의 댓글