본문 바로가기

개발일지26

POSA, 패턴 시스템 패턴 시스템에 대하여 마인드 맵으로 정리해보았다. 패턴 분류와 관련하여 GoF 디자인 패턴의 목적(purpose)과 범위(scope) 분류에 대한 부정적 서술이 눈에 띈다. 게다가 이 글을 작성한 사람은 GoF 패턴 집필진 중 한명인 Richard Helm 이다. 아울러 패턴 분류를 위한 분류 스키마를 제안하고 있는데 꽤 괜찮아보인다.(도입해야지~^^) 아키텍처 패턴 디자인 패턴 이디엄 혼돈에서 질서로 from mud to structure Layers Pipes and Filters Blackboard Interpreter 분산 시스템 distributed system Broker Pipes and Filters Microkernel 상호작용 시스템 interactive system MVC PVC 적응.. 2012. 2. 14.
Proactor with IOCP 그간 네트워크 관련 작업은 인디(Indy)에 의존하고 있었다. 하지만, 멀티플랫폼 환경(Android, Bada, iOS 등)에서 이식성을 생각하자면 아무래도 부족한 점이 많다. 하여 개인적으로 사골처럼 우려먹을 수 있는 네트워크 프레임워크를 구현하기로 마음 먹었다. 일단, 1차 결과물로 기본적인 뼈대 정도를 뽑아보았다.(델파이의 내장된 투게더의 결과물이 마음에 들지않아 자바용 UML 툴로 다이어그램을 그렸다. ㅠㅠ 덕분에 Object Pascal 과 Java 가 뒤섞인 다소 이상한 형태의 클래스 다이어그램이다.) 최초 작업은 Delphi XE2 로 윈도우즈 기반 환경이다. 대용량 접속 처리를 위해 IOCP 기반으로 하였고 demulitiplexing 및 dispatch 처리를 위하여 Asynchrono.. 2012. 2. 13.
POSA2, ACT 패턴 Asynchronous Completion Token 패턴의 마인드맵을 그려보았다. 개인적으로 정리한 것이고 추후 적용 과정에서 갱신해 나갈 생각이다. 클래스 다이어그램으로 표현하면, ACT 를 Command 패턴(2012/02/08 - [프로그래밍/OOP] - GoF, Command 패턴)으로 적용한다면, TCompletionHandler 가 TReceiver 에 해당하고 TACT 는 TCommand 가 된다. 이때 TInitiator 가 TInvoker 가 된다. 2012. 2. 8.
GoF, Command 패턴 책의 내용을 요약하여, Command 패턴의 마인드맵을 그려보았다. 클래스 다이어그램으로 표현하면, 만약, 어떤 기능을 수행하는 클래스 TReceiver 가 있다고 하자, 해당 기능을 사용하기 위하여 인스턴스를 생성하고 메소드 ActionA, ActionB 등을 호출할 것이다. 헌데, 이 기능들을 좀 더 복잡하게 사용(여러 UI 에서 접근, 기능의 조합, 매크로 기능, UnDo 기능 등..)해야하는 경우가 발생한다면 어떻게 해야할까? 애초 기능 그 자체를 클래스로 설계하거나, 기능 클래스를 정의한 뒤 실제 동작은 기존 기능을 처리하던 클래스에 위임해버리는 방법이 있을 것이다. 이때 후자를 Command 패턴이라고 한다. TInvoker 라는 놈은 기능 클래스들을 소유하고 호출하는 것으로 논리적인 개념으로.. 2012. 2. 8.
POSA, Forwarder-Receiver 패턴 POSA 의 통신관련 대표적인 패턴으로, 분산 시스템의 컴포넌트와 통신을 위해 사용하는 메커니즘 간 결합도(coupling)를 줄이는 방법 중 하나이다. 결합도를 낮추기 위하여 캡슐화와 위치 투명성을 고려하여야하는데 Forwader-Receiver 패턴은 캡슐화의 역할을 한다. 전체적인 구조에서 보았을 때, Peer 와 Peer 간의 통신을 나타내며 직접적인 송수신 파트는 Forwader 와 Recevier 가 담당한다. DCOM 이나 CORBA 관련 자료를 본 적이 있다면 마샬링이나 언마샬링 등이 익숙할 것이다. Peer : 어플리케이션 서비스를 제공한다. 다른 피어들과 통신한다. Forwarder : 메시지를 보내기 윈한 일반적인 인터페이스(SendMsg)를 제공한다. 원격 수신기에 보내는 메시지를 .. 2012. 1. 31.
POSA, Whole-Part 패턴 GoF 의 디자인패턴이 상당히 구체적이라면, POSA 의 디자인패턴은 좀 더 범위가 두루둥실하다. 사실, 이 Whole-Part 패턴의 경우 어느 정도 OOP 를 해온 경험이있다면 당연한 이야기에 이름을 붙인 정도라고 볼 수 있다. 가령, 인터페이스 혹은 추상화된 기능을 정의(클래스)하고 각 기능의 위임 역할을 하는 클래스들을 결합하여 사용하는 것은 상식에 가까운 설계이지 않을까? 여기서 추상화된 기능을 정의한 클래스가 Whole 이 되고 위임을 하게된 클래스들이 Part 가 된다. 아울러 GoF 의 디자인패턴에 비해 좀 더 범위가 크다고 했는데, Composite 패턴이 이러한 Whole-Part 패턴의 일종으로 설명되고 있다. 이때, TComposite 가 Whole 이 될 것이고 TLeaf 가 Pa.. 2012. 1. 30.
나의, UML 객체지향 설계 - 3 - UML 은 모델링 도구이며 개념설계에 있어 편리한 다이어그램으로 UseCase 와 Activity 를 설명하였다. 그러나 이것은 어디까지나 개인적인 경험에 의한 판단이고 만약, 그외 다른 UML 다이어그램으로 우리가 애초 하고자한 목적인, 의뢰자와의 커뮤니케이션을 원할하게 풀어갈 수 있다면 그것만으로 충분하다. 의뢰자의 도메인영역에 대한 이해가 어느정도 이뤄지게되고 도입하려는 프로그램에 대한 역제안이 발생하는 단계에까지 이르면 전체적인 시스템 구성을 확립하게된다. 이 단계에 적합한 다이어그램은 Deployment(배치) 이다. 사례1 2010년경 모 이동통신 회사의 동기화 프로그램의 Deployment 다이어그램이다. 노란색은 이미 존재하고있는 외부 모듈이고 파란색은 개발하여야할 부분이다. 이와 같은 색.. 2011. 12. 20.
나의, UML 객체지향 설계 - 2 - 개인적인 견해이지만, 프로젝트 실패 요인의 99% 는 개념 설계의 부재에서 온다고 본다. 만약, 회계 관련 프로그램을 제작한다고 가정하자. 해당 프로그램 개발을 가장 잘 할 수 있는 방법은 무엇일까? 그냥 상식선에서 생각해보자. 아마도 회계사이면서 프로그래밍적 지식이 높은 사람이 개발하거나... 프로그래머이면서 회계에 대하여 많은 경험을 가지고 있는 사람이 개발하는 것일 거다. 바로 여기에 프로젝트 성공의 핵심 열쇠가 숨어있다. 만약, 의뢰자인 회계사가 프로그래밍에 대한 이해가 높거나 혹은 프로그래머가 회계에 대한 이해가 높다면 분명 프로젝트는 성공할 가능성이 높다. 하지만 그런 경우는 드물다. 그렇다면 차선으로 할 수 있는 일은 무엇일까? 아마도 그것은 의뢰자에게 프로그래밍에 대한 이해와 프로그래머에게.. 2011. 12. 19.
나의, UML 객체지향 설계 - 1 - UML 을 사용하여 설계를 시작한 것은 대략 2001년경부터인데... 당시 객체지향 프로그래밍(OOP), GoF의 디자인 패턴과 더불어 나의 3대 과제 중 하나였다. 인터넷뿐만 아니라 관련 서적을 통해 공부하였으며 2004년 3판까지 나온 "초보자를 위한 UML 객체지향 설계"의 1판을 최소 5회 이상 읽었던 것으로 기억한다. 그리고 지금도 객체지향 설계와 관련한 책추천을 받으면 반드시 이 책을 소개하곤한다. 초보자를 위한 UML 객체지향 설계 (제3판)국내도서>컴퓨터/인터넷저자 : 조셉슈멀러 / 오종범,곽용재역출판 : 정보문화사 2004.10.09상세보기 처음 실무 적용은 그야말로 혼돈이었다. 어떤 상황에 어떤 다이어그램을 그려야하는지? 혹은, 클래스를 추출하기 위한 명사, 동사 테이블에 분류할 명사의.. 2011. 12. 16.
Delphi 와 C/C++ 기반 Open Source - 1 - 델파이가 Object Pascal 기반의 우수한 IDE임에도 불구하고 Java 와 C/C++ 로 진행되는 오픈 소스 프로젝트를 보며 델파이 개발자로서 한계를 느끼게 되는 경우가 종종있다. 파스칼 프로그래머로 아무리 비주류라지만 오픈 소스 프로젝트에서조차 소외되는 기분은 그야말로 참담하다. 앞으로도 이를 극복하기 위한 다양한 시도가 이뤄지겠지만 현재까지 내가 오픈소스를 취급하는 방법은 다음과 같다. 1. Python 과 접목 흔히들 Python 을 Glue Language 라고 부른다. 다른 언어랑 잘 들어붙는다는 의미(사실, C 와의 결합)인데... Linux 진영 및 구글에서 Python 을 다양하게 활용하고 있어, 오픈 소스에서도 Python API 를 비교적 잘 제공하는 편이다. 따라서 이를 델파이.. 2011. 11. 24.
먼지가 뒤덮인 90년 서류철 속 Cafe 소스... 프로젝트 정식 릴리즈를 앞두고 철야를 한 후, 오전 9시경 집에 들어와 오후 2시까지 잠이 들었다. 이렇게 기계부품처럼 살아갈 때면 문득 어린 시절 열정 하나로 프로그래밍을하던 시절이 떠오른다. 물론, 타임머신이 있다면 되돌아가 뜯어말리고 싶지만... ^^ 프로그램을 배우게 된 건, 초등학교(그당시 국민학교) 3년 정도였을 것으로 기억한다. 당시 금성 FC-100 으로 사설 학원에서 4개월 정도 베이직을 배웠다. 그 후, 가정 형편이 여의치 않아 컴퓨터 학습 부록으로 딸려온 Apple II+ 컴퓨터 브로마이드를 바닥에 펼쳐두고 자판을 두들기는 시늉만으로 수년간을 상사병으로 살아야만했다. 그렇게 중학교 2년 정도까지 머릿속으로 상상 코딩만을 하다가 Apple IIe(사진과 달리 국내 호환기종이었지만...).. 2011. 9. 9.