지난 시간에 이어 계속해서 Adapter 패턴에 대해 알아보겠습니다. 지난 시간에는 Adapter가 필요한 콘크리트 코드에 대해 살펴봤고 이번 시간에는 실제적으로 콘크리트 코드가 interface 화 될 실제 driver interface를 살펴 보도록 하겠습니다. 궁극적으로 Adapter 패턴은 기존의 콘크리트 코드가 새로운 interface에 맞지 않아 중간에 Adapter를 끼워넣어 맞추는 역할을 하게 됩니다. 이번 시간에는 그중에 새로운 interface에 대해 살펴보겠습니다. driver_id_t 를 통해 앞으로 생성될 driver들의 고유 번호를 부여합니다. 그리고 기본적인 Open, Close, Read, Write들을 구현 하도록 되어 있습니다. 필요시 더 많은 기능을 넣을 수 있습니다. ..
[네이버 지식백과]adapter 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))남이 작성한 코드를 내 코드에 적용해야 할 때가 아주 많습니다. 그러나 대부분 크기가 다른 볼트와 너트처럼 딱 맞아 떨어지지 않습니다. 이럴 땐 어떻게 해야 할까요? 중간에 양 쪽에 잘 맞는 나사를 하나 덧 대는 것으로 해결 할 수 있습니다. Adapter 패턴은 흔히 레거시 코드(Legacy Code)라고 불리는 예전에 작성된 코드들을 현재의 코드와 맞게 고치는 방법입니다. 다른 사람이 작성한 코드를 자신의 코드에 맞게 고쳐쓰는 방법으로도 좋습니다. 우리는 중간에 Adapter라는 Wrapper 함수를 만들어 Adapter패턴을 구현할 것입니다. 이번 예제에서는 display라는 콘크리트 ..
수학시험에서 대부분 답이 0 혹은 1인 경우가 많습니다. C언어에서도 이러한 법칙은 어느정도 통용되는 것 같습니다. 코드내에 0과 1이 외의 숫자가 나타나는 경우를 최소화 해야 합니다. 더욱 엄격하게 하자면 코드에서 0 이외의 모든 숫자는 빼는 것이 좋습니다. 그러면 어떻게 숫자를 빼야 할까요? enum에 해답이 있습니다. 아래와 같이 선언하면, 0과 1의 타입의 형태에서는 false와 true만 사용하게 됩니다. typedef enum { false = 0, true = 1 }bool; 위의 typedef enum 사용할 때 주의할 점이 있습니다. 바로 아래와 같이 사용하면 안됩니다. 왜 그럴까요? if(is_exist) //true { //when true, implements } else { //w..
[네이버 지식백과] factory method 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 예제1) http://dextto.tistory.com/140예제2) http://kingoh.tistory.com/entry/Factory-Method-%ED%8C%A8%ED%84%B4 우선 위의 예제를 통해 Java에선 어떻게 Factory method를 구현했는지 보고 오시면 더 좋을 거 같습니다. C에선 class라는 개념이 없기 때문에 어떻게 보면 이전 글들에서 계속해서 Factory method를 써왔습니다. 이번엔 다시 한번 재탕으로 Factory method를 살펴 보도록 하겠습니다. 이번 예제는 display를 구현해 보도록 하겠습니다. firmware의 대부..
지난 번에 이어 이번에는 app 자체를 만들어 보도록 하겠습니다. 이 app은 app manager에서 control 되며 각종 메시지 및 키 이벤트를 받습니다. 우선 이해를 위해 지난 시간에 main.c의 코드를 다시 보도록 하겠습니다. 우리가 이번에 만들 app은 27번째 줄 setup_app_scene_1()에서 구현 됩니다. 실제 app의 포인터를 app manager에게 전달하는 부분이지요. 여러번 반복 되었지만, setup으로 시작하는 함수는 객체 인스턴스를 반환한다고 봐도 되겠군요. new로 시작해도 되구요, init으로 시작해도 상관 없습니다면 일관성만 갖춘다면 될거 같습니다. 그럼 app scene 1의 헤더 파일을 보도록 하겠습니다. main.c에서 호출하는 setup_app_scene..
시간이 지나니 이전글에서 많은 부족함이 느껴 다시 한번 글을 쓰기로 했습니다. this는 객체지향 언어에서 class 자신을 나타냅니다. 자기 자신이기 때문에 별도의 이름을 갖는 다는 것도 좀 이상하기 때문에 this라는 키워드는 정말 잘 정한 것 같습니다. 우리는 C에서 this라는 것을 활용해서 사용해보도록 하겠습니다. 다음과 같은 main.c 코드가 있습니다. uart 포인터를 얻어와 uart를 open하고, read, write, close하는 일을 절차적으로 진행하고 있습니다. 사용자의 입장에서는 사용하는 기능을 구현하는 객체의 이름을 알고 있어야 합니다. 따라서 여기서는 uart라고 명시했습니다. uart의 header 파일입니다. driver_t라는 interface를 정의하고 본체 코드에서..
이번 시간에는 main.c에서 실제 app을 어떻게 사용하는지 알아보도록 하겠습니다. main.c에서 app을 만들어 사용하기 전에 전에 만들었던 message process [Message 기반]와 key process [Builder pattern]를 사용해 setup 해줍니다. 메시지가 발생했을 때와 key가 클릭 되었을 때 message에 queue 형태로 쌓일 것입니다. message process에서는 쌓인 메시지를 무한루프를 돌면서 current app에 전달해주게 됩니다.25번 줄에 app manager 를 setup하여 app_manager를 생성합니다. 그리고 26번줄에 create_app에 대망의 첫번째 app을 setup_app_scene_1()을 해서 넣어줍니다.26번줄에 생뚱맞게..
"C에서 Android의 Activity 구현하기""app은 이제껏 우리가 만든 패턴들의 집합체 입니다."그렇습니다. 여태 우리는 완성된 application의 framework를 만들기 위해 계속해서 패턴들을 학습해 오고 있었습니다. 이런 패턴들의 총아인 app을 구현해 보도록 하겠습니다.Android Java API, C# API 등 자원이 풍부한 Application 플랫폼들은 한결 같이 화면 단위 컨트롤들을 가지고 있습니다. 예를 들어 Android 에선 Activity가 생성이 되면, 레이아웃을 통해 화면에 디스플레이도 할 수 있고 각종 메시지(버튼 및 터치 포함)도 받을 수 있도록 되어 있습니다. 하나의 application에서 Activity가 없다는 것은 상상 할 수 없을 것입니다. And..