Adapter 패턴
비슷한 기능/구성이지만 명칭(인터페이스)이 다를 때, 그 중간에 어댑터를 두어 통역가 역할을 한다.
예를 들어, 단순 출력 기능의 print 함수가 있고, 역할은 같지만 다른 버전의 oldprint 함수가 있다.
print만 써도 oldprint/print 상관없이 동작시키고 싶다면?
# 문제 상황
일반적으로 클래스/인터페이스를 구현한다면, print 함수에 대해 하위 클래스에서 재정의하고 같은 이름으로 호출할 수 있지만, oldprint는 그럴 수 없다.
# 해결
print 함수를 사용해도, 그 내부에서 oldprint를 호출하는 Adapter를 선언함으로써, 사용자는 print만 써도 print / oldprint 상관없이 사용할 수 있게 된다.
# 문제 상황
Adapter를 사용하지 않고 oldprint에서 직접 print를 호출하는 형태는 다음 상황에서 힘들어질 수 있다. print 함수의 명칭이 바뀐다면, oldprint를 사용한 곳 모두 찾아서 바꿔줘야 한다.
# 해결
Adapter를 사용하면, Adapter 내부에 선언된 것만 바꿔주면 되므로, oldprint를 많이 사용할수록 효과는 더 커진다.
Proxy 패턴
대리인 역할.
여러 가지 이유로, 직접 접근을 하지 못하게 만들 때 사용.
A → Z 로 한 번에 갈 거를 A → proxy → Z 로 구성한다.
단순히 생각하면, 괜히 한 단계 더 거쳐가므로 불필요해보이고 성능 저하로 생각된다.
그렇기에 목적(보안 등)이 있을 때 사용한다.