지난 시간에 이어 계속해서 Adapter 패턴에 대해 알아보겠습니다. 지난 시간에는 Adapter가 필요한 콘크리트 코드에 대해 살펴봤고 이번 시간에는 실제적으로 콘크리트 코드가 interface 화 될 실제 driver interface를 살펴 보도록 하겠습니다.
궁극적으로 Adapter 패턴은 기존의 콘크리트 코드가 새로운 interface에 맞지 않아 중간에 Adapter를 끼워넣어 맞추는 역할을 하게 됩니다. 이번 시간에는 그중에 새로운 interface에 대해 살펴보겠습니다.
driver_id_t 를 통해 앞으로 생성될 driver들의 고유 번호를 부여합니다. 그리고 기본적인 Open, Close, Read, Write들을 구현 하도록 되어 있습니다. 필요시 더 많은 기능을 넣을 수 있습니다. 아무래도 UART 같은 경우에는 observer 핸들러를 넣을 수 있는 함수도 필요할 수 있습니다.
28번줄의 set_driver에 생성된 driver를 등록하게 되고 등록된 driver를 가져오거나 삭제등을 할 수 있도록 합니다. 아래 코드에서 실제 이러한 기능을 구현해 보도록 하겠습니다.
실제 구현은 보시는 것과 같이 간단합니다. driver라는 자료구조에 하나씩 등록하고 요청하면 전달해 주는 역할만 하면 됩니다.
여기서 주목해야 할 사항은 40번줄의 remove_all_driver 입니다. 실제 이러한 interface없이 콘크리트 코드만 존재할 경우 모든 device driver를 끄려면 각각의 close 함수를 모두 불러와야합니다. 실제로 절전 모드라든가 슬립모드 시 각 장치들을 끄는 경우가 많은데, 일일히 찾아서 끄는게 귀찮고 실수하기 쉽습니다. 그런데 이렇게 설계하면 전부 끄는게 가능해 집니다.
다음 시간에는 기존의 display와 driver interface를 잇는 Adapter를 만들어 보도록 하겠습니다.
'▶ 이전글 > C Pattern' 카테고리의 다른 글
Adapter 패턴 - 3 (0) | 2018.02.25 |
---|---|
Adapter 패턴 - 1 (0) | 2018.02.23 |
factory method 패턴 (0) | 2018.01.31 |
C의 app 만들기 - 3 : app (0) | 2018.01.31 |
C 언어에서 this 구현2 (0) | 2018.01.27 |