Design Pattern - Adapter Pattern (어댑터 패턴)

2025. 10. 17. 16:56·C#

어댑터 패턴 (Adpater Pattern)

서로 다른 인터페이스를 가진 클래스들을 함께 동작하도록 연결하는 디자인 패턴이다.

기존 시스템을 건드리지 않고, 새로운 클래스나 라이브러리를 기존 구조에 자연스럽게 통합할 때 유용하다.

 

가장 직관적인 비유는 플러그 변환기 다.

220V 콘센트에 110V 기기를 연결하려면 어댑터가 필요하듯,

소프트웨어에서도 기존 코드의 인터페이스와 새 클래스의 인터페이스가 맞지 않을 때 이를 변환해주는 역할을 한다.

 

 

기본 구성은 다음 세가지로 이루어진다.

Target (목표 인터페이스) 클라이언트가 기대하는 인터페이스
Adaptee (적응될 클래스) 기존 시스템과 호환되지 않는 외부 클래스
Adapter (어댑터) Target 인터페이스를 구현하면서 내부적으로 Adaptee를 호출하여 변환

 

 

 

다음은 다리로 걷는 동물들의 걷기 시스템을 물고기 클래스에도 호환시키는 예시다.

// Target: 클라이언트가 기대하는 인터페이스
public interface IWalker
{
    void Walk();
}

// Adaptee: 원래 다리를 사용하지 않는 클래스
public class Fish
{
    public void Swim()
    {
        Console.WriteLine("Fish is swimming!");
    }
}

// Adapter: Fish를 IWalker 인터페이스로 변환
public class FishAdapter : IWalker
{
    private Fish _fish;

    public FishAdapter(Fish fish)
    {
        _fish = fish;
    }

    public void Walk()
    {
        // 내부적으로 swim을 대신 호출
        _fish.Swim();
    }
}
public abstract class Animal
{
    public abstract void Walk();
}

public class Dog : Animal
{
    public override void Walk() => Console.WriteLine("Dog is walking!");
}

public class Cat : Animal
{
    public override void Walk() => Console.WriteLine("Cat is walking!");
}

class Program
{
    static void Main()
    {
        Animal dog = new Dog();
        Animal cat = new Cat();
        IWalker fish = new FishAdapter(new Fish());

        dog.Walk();
        cat.Walk();
        fish.Walk(); // 내부적으로 Swim() 실행
    }
}

 

결과

// Dog is walking!
// Cat is walking!
// Fish is swimming!

 

 

즉 이런 식으로 어댑터는 "호출을 중계하고 변환하는 중간자" 역할을 수행한다.

이는 인터페이스 불일치를 해결하는 구조적 패턴이다.

 

 

장단점

장점

기존 코드를 수정하지 않고 확장 가능 (OCP 원칙 준수)

서로 다른 인터페이스를 자연스럽게 연결 가능

레거시 코드와 신기술을 병행 사용 가능

 

단점

클래스 수 증가로 인한 유지 보수 불편 및 가독성 저해

성능 오버헤드 : 단순 위임 호출이기 때문에 미세한 비용 증가 존재

근본적인 설계 문제를 해결하지 못함

 

 

즉, 어댑터 패턴을 많이 사용해야하는 경우 그냥 리팩토링을 고려하는 게 좋을 수 있다...

 

'C#' 카테고리의 다른 글

VisualStudioCode(VSC) 에서 한글 깨짐 이슈  (0) 2025.10.28
Design Pattern - Singleton Pattern (싱글톤 패턴)  (0) 2025.10.20
C# - 콘솔로 "2중 버퍼링 (Double Buffering)" 구현하기  (0) 2025.10.15
C# - GetAsnycKeyState() 기반 실시간 키 입력 처리  (0) 2025.10.14
C# - LockConsoleSize() : 콘솔 창 크기 고정 및 리사이즈 방지  (1) 2025.10.14
'C#' 카테고리의 다른 글
  • VisualStudioCode(VSC) 에서 한글 깨짐 이슈
  • Design Pattern - Singleton Pattern (싱글톤 패턴)
  • C# - 콘솔로 "2중 버퍼링 (Double Buffering)" 구현하기
  • C# - GetAsnycKeyState() 기반 실시간 키 입력 처리
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    터미널
    unity
    function
    stack
    inputsystem
    Photon
    Abstract
    class
    Design Pattern
    console
    firebase
    useState
    콘솔
    delegate
    C#
    알고리즘
    클래스
    list
    게임
    스택
    유니티
    Queue
    Network
    추상 클래스
    최적화
    interface
    네트워크
    struct
    큐
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
Design Pattern - Adapter Pattern (어댑터 패턴)
상단으로

티스토리툴바