작심삼일

6주차-1. Adapter 본문

스터디/디자인 패턴

6주차-1. Adapter

yun_s 2021. 6. 9. 22:10
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

클래스의 인터페이스를 사용자가 기대하는 인터페이스 형대로 적응(변환) 시킵니다.

서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킵니다.

 

말 그대로 어댑터, 우리가 흔히 말하는 돼지코 콘센트와 같은 역할을 한다.

Decorator 패턴과 헷갈릴 수 있지만, decorator 패턴은 확장을 하는 것이고, adapter 패턴은 호환성을 위한 것이라 생각하면 편하다.


어떻게 쓰는가

딱히 어렵지 않게 사용할 수 있다.

class Data1():
    def __init__(self, path):
        self.path = path
        self.data = f.readlines(path)   # 간단히 적었습니다
    
    def __getitem__(self, idx):
        return self.data[idx]			# self.data[idx]: (img, label)
  
 class Data2():
    def __init__(self, path):
        self.path = path
        self.data = f.readlines(path)   # 간단히 적었습니다
    
    def __getitem__(self, idx):
        return self.data[idx]			# self.data[idx]: (path, img, label)
        

# 모든 data의 형태가 (img, label)로 되도록 하는 Adapter
 class Adapter4Data():
     def for_data1(data):
          return (data[0], data[1])
     def for_data2(data):
          return (data[1], data[2])

어디서 활용되는가

이는 책의 내용 (p. 198)을 그대로 가져왔다.

1. 기존 클래스를 사용하고 싶은데 인터페이스가 맞지 않을 때

2. 이미 만든 것을 재사용하고자 하나 이 재사용 가능한 라이브러리를 수정할 수 없을 때


My Opinion

딱히 어려운 개념이 아니어서 이해하기 쉬웠다.

개인적으로 deep learning쪽 일을 할 때, 데이터의 구조가 다른 경우가 많은데, 이럴 때 사용하면 편할 것 같다.

이렇게 바로 사용할 수 있는 공부를 하면 기분이 좋다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

7주차-1. Flyweight  (0) 2021.06.23
6주차-2. Strategy  (0) 2021.06.09
5주차-2. State Pattern  (0) 2021.05.26
5주차-1. Decorator Pattern  (0) 2021.05.26
4주차-2. Template Method  (0) 2021.05.13
Comments