전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

이론/디자인패턴

어뎁터 패턴

2022. 12. 2. 23:31

어댑터 패턴이란?

💡 서로 호환되지 않는 인터페이스를 가진 객체들이 상호작용할 수 있도록 두 객체 사이에서 호환을 해주는 구조를 만드는 것입니다.

 

어댑터 패턴을 어떤 경우에 사용할까?

A 인터페이스를 사용하고 싶은데, A 타입의 데이터로만 작동한다. 하지만 나는 B 타입의 데이터를 입력받아 사용해야할 때

→ 궁여지책으로 A 인터페이스를 내가 원하는 B타입으로 작동하도록 수정할 수도 있지만, 그렇게 한다면 A 인터페이스에 의존하는 코드들을 수정해줘야한다. 또한, A 쪽의 코드에 내가 접근하지 못하는 경우라면, 이 해결방식조차 이용할 수 없다.

 

어댑터 패턴을 사용한다면?

  • 클라이언트 코드와 사용하고자하는 코드의 수정 없이 호환 가능한 구조를 만들 수 있다.
  • → OCP
  • 타입을 변환해주는 로직을 분리할 수 있다. → 책임을 분리 → SRP

 

어댑터 패턴을 구현하는 방식

중요한 부분

  • 어댑터는 클라이언트의 인터페이스를 따라야하고, 클라이언트도 인터페이스를 이용해서 어댑터를 사용해야한다. 그래야 추가적인 코드의 수정이 없기 때문!
  • 어댑터는 데이터의 변환 책임만 갖도록 하자.

 

독수리를 닭으로 바꿔보겠습니다.

public interface Eagle {
		public void flyHigh();
		public void eatMeat();
}
public class BaldEagle implements Eagle {
		public void flyHigh() {
				System.out.println("하늘 높이 날아갑니다.");		
		}

		public void eatMeat() {
				System.out.println("고기를 먹습니다.");
		}
}
public interface Chicken {
		public void flyLow();
		public void eatFeed();
}
public class CornishChicken implements Chicken {
		public void flyLow() {
				System.out.println("높이 날지 못합니다.");	
		}

		public void eatFeed() {
				System.out.println("사료를 먹습니다.");	
		}
}
public class EagleToChickenAdaptor implements Eagle {
		Chicken chicken;

		public ChickenAdaptor(Chicken chicken) {
				this.chicken = chicken;
		}

		public void flyHigh() {
				chicken.flyLow();	
		}

		public void eatMeat() {
				chicken.eatFeed();
		}
}
pubilc class App {
		public static void main(String[] args) {
				Eagle eagle = new BaldEagle();
				System.out.println("독수리입니다.");
				eagle.flyHigh();
				eagle.eatMeat();
				System.out.println("-------------------");
				
				EagleToChicken adaptor = new EagleToChicken();
				System.out.println("닭이 된 독수리입니다.");
				adaptor.flyHigh();
				adaptor.eatMeat();
				System.out.println("-------------------");
				
				Chicken chicken = new CornishChicken();
				System.out.println("닭입니다.");
				chicken.flyLow();
				chichen.eatFeed();
		}
}

 

💡 결과

독수리입니다.

하늘 높이 날아갑니다.

고기를 먹습니다.

-------------------

닭이 된 독수리입니다.

높이 날지 못합니다.

사료를 먹습니다.

-------------------

닭입니다.

높이 날지 못합니다.

사료를 먹습니다.

저작자표시 (새창열림)

'이론 > 디자인패턴' 카테고리의 다른 글

추상 팩토리 패턴  (0) 2022.12.06
팩토리메서드 패턴  (0) 2022.12.04
데코레이터 패턴  (0) 2022.11.26
프록시 패턴  (0) 2022.11.25
싱글톤 패턴이란?  (0) 2022.11.24
    '이론/디자인패턴' 카테고리의 다른 글
    • 추상 팩토리 패턴
    • 팩토리메서드 패턴
    • 데코레이터 패턴
    • 프록시 패턴
    모달조아
    모달조아

    티스토리툴바