본문 바로가기

[ Windows Program ]

[WinAPI] The Message Loop 이부분이 바로 메인 메시지 루프(Main message loop) 이다. ( 메시지 큐에서 메시지를 계속해서 꺼내는 반복문을 말한다. ) While문이 반복문이라는걸 다들 알고 있을 것이다.( C/C++ 컨텐츠 참고 ) While문에 0이 들어가면 반복이 끝나는데 저기서 GetMessage 라는 함수를 이용해서 말 그대로 메시지를 받아오는 역할을 한다. 아니 그럼 어디서 메시지를 받아온다는 말인가요? 메시지 큐(Message Queue)에서 메시지를 받아온다. 메시지 큐에 대한 내용은 다음 포스트에서 다루겠다. 그렇게 메시지를 받고 이 GetMessage() 함수가 0을 반환하면 반복이 끝난다는 뜻이다. 이런 작업은 운영체제 자체가 하는것이기에 그냥 동작원리만 이해하면 된다. 이벤트가 발생하면 (키보드나.. 더보기
[WIN32 C++] Thread 사용법, CreateThread() / _BeginThreadex() 1. Thread란? 스레드는 프로세스 내의 수행 흐름을 의미한다. 프로그램이 초기화가 진행되는 동안에 시스템은 주 스레드를 생성하므로 하나의 프로세스에는 둘 이상의 스레드가 수행될 수 있다. 이러한 스레드들은 단일 주소 공간을 공유하게 된다. 스레드들은 동일한 코드를 수행할 수도 있고, 동일한 데이터를 조작할 수도 있다. 커널 오브젝트 핸들 테이블은 스레드별로 존재하는 것이 아니고 프로세스별로 존재하기 때문에, 스레드들은 커널 오브젝트 핸들도 역시 공유한다. ⑴ 스레드를 사용하는 이유 과연 스레드는 왜 사용하는 것일까? 이유는 간단하다. 한번에 여러가지 작업을 하기 위해서이다. 만약 당신이 간단하게 코딩을 해보았다면, CPU는 바보 그자체라서 한번에 한가지 일 밖에 못한다는 것을 알것이다. 무한 루프로.. 더보기
분산 시스템 vs 병렬 시스템 ☼ 분산시스템(Destribued Systems) : 응용에 사용되는 컴퓨터 네트워크는 메모리와 클락을 공유하지 않는 처리기의 집합으로 구성된다. 대신 각 처리기는 자신의 로컬 메모리를 가진다. 처리기들은 고속의 버스 혹은, 전화선과 같은 여러 가지 통신선을 사용해 상호 통신한다. ->2-Tier - Client-Server Systems(pc의 프로세싱 능력 강화로 등장) - thin server, fat client - 사용자 증가에 따른 서버 부하 - 모든 클라이언트 시스템에 애플리케이션을 설치,배포,유지보수의 어려움 - 모든 클라이언트 시스템의 동일 컴퓨팅 환경이 요구되어진다. - 클라이언트 시스템 간의 자원 공유의 어려움 - 서버 목적에 맞는 프로토콜을 구현해야 하므로 데이터와 요청 구분 정보등.. 더보기
[COM] 32. ATL의 개요 (2) - ATL COM 객체 구현과 기반 클래스 궁극적으로 우리가 만들어야 할 것은 COM 사용 환경이 아니라 COM 객체이죠. 한번 만들어 보겠습니다. 1. 앞의 예에서 계속 사용 한 것 처럼 sayHello를 만들겠습니다. 인터페이스에 메서드를 추가 합니다. 2. 매개 변수 형식과 변수 특성 등을 선택하고 추가를 누릅니다. 3. 이런 방법으로 입출력용 인자 두개를 등록 합니다. 4. 추가 한 후, idl 파일에서 살펴보면 어떻게 추가 되어 있는지 볼 수 있습니다. 클래스에 함수 추가하는 것과 크게 다르지 않습니다만 인자에 특성이 들어가는 것과 만들어진 결과가 그냥 헤더 파일의 함수 선언과는 좀 다르다는 점이 있지요. 또한, CHello에도 같은 이름으로 헤더 파일과 소스에 해당 메서드가 추가 되었습니다. 즉, 이 클래스에 정의 된 함수 중 외부로 .. 더보기
[COM] 31. ATL의 개요 (1) - 프로젝트와 객체의 생성 순수한(?) C++ 언어를 이용한 COM과 VC++의 COM. 이제 ATL(Active Template Library)입니다. 이는 '작고 빠르고 확장성을 갖는 COM 컴포넌트를 쉽게(!) 구현 할 수 있게 한다'....라고 합니다. '작다'는 특징은 템플릿이기 때문에 실제 인스턴스가 만들어지기 전까지는 코드가 생성되지 않기 때문에 작을 수 있고, '쉽게' 구현 할 수 있다는 것은, 필수 인터페이스(IUnknown, IClassFactory)에 대한 코드가 구현되어 있기 때문에 편리합니다. '빠르고 확장성'이 있다는 것은...아마도, 설계를 잘 했나보군요. 하핫~ ATL이 어떻게 이런 장점을 제공하는지는 예제를 통해 어느 정도 확인 할 수 있겠습니다. 예제를 만들 때 눈 여겨 봐야 할 점은 ATL을 사용.. 더보기
개발자의 초식, 디자인 패턴「그러나…」 1980년대 중반 소프트웨어의 사용 범위와 규모가 폭발적으로 늘어나게 되면서 소프트웨어를 구성하는 프로그램의 논리는 점점 더 복잡한 실타래처럼 꼬여갔다. C 언어로 대표되는 기존의 ‘절차적’ 언어가 그런 변화를 감당하기에 역부족이라는 사실은 누구의 눈에도 분명했다. 이와 같은 상황에 등장하여 사태를 단숨에 제압한 존재가 바로 ‘객체’였다. 객체가 제공한 ‘코드의 재사용(reusability)’과 ‘다형성(polymorphism)’이라는 약은 중병을 앓던 소프트웨어의 세계에서 놀라운 효능을 지닌 처방이 되었다. 객체의 ‘약’맛을 본 프로그래머들은 세부적인 알고리즘의 구현에 점점 덜 구애받게 되었다. 세부적인 논리보다는 요구사항(requirements)을 분석한 결과에 따라서 객체를 정밀하게 설계하는 일이 .. 더보기
④ 리스코프 치환 원칙 과거 헐리우드에서는 배우들이 좋은 영화의 배역을 구하기 위해 영화제작사에 자주 전화를 걸었다고 한다. 배우들의 잦은 전화 때문에 영화기획사 담당자들이 자신의 업무를 할 수 없을 정도로 전화에 시달리게 됐다. 고민 끝에 이들은 한 가지 좋은 묘안을 생각해 냈다. 배우들에게 자신이 어떤 역할을 잘 하며 어떤 영화 배역을 맡고 싶다고 등록하도록 한다. 기획중인 영화에서 어떤 배역이 나왔을 때 배우가 등록한 목록에서 적합한 배우를 찾은 다음 그 배우에게 전화하면 캐스팅이 시작된다. 바로 “전화하지마, 내가 전화할께(Don‘t call us, we’ll call you)?? 방식은 ‘헐리우드 원칙’이라고도 부르며, GoF가 「템플릿 메쏘드」 패턴을 소개하면서 예로 든 내용이다. 의존 관계 역전의 법칙 그럼 기획사.. 더보기
③ 인터페이스 분리의 원칙 “사람은 다른 사람과 말을 할 때 듣는 사람의 경험에 맞추어 말해야만 한다. 예를 들어 목수와 이야기할 때는 목수가 사용하는 언어를 사용해야 한다.” - 플라톤의 파에톤(Phaethon) “아무도 듣는 사람이 없는 숲 속에서 나무가 쓰러질 때 소리가 나는가?”라는 불가에서 유래한 질문이 있다. 그간 많은 현자들이 이 질문에 대해 ‘아니다’라는 일관된 대답을 해왔다. 소리는 지각되어야만 소리가 되기 때문에 나무가 쓰러질 때 음파는 발생하겠지만 듣는 사람이 없다면 소리는 없다는 것이다. 사람 사이의 커뮤니케이션도 마찬가지이다. 전달하려는 사람이 무언가를 외친다고 해도 듣는 사람이 없다면 커뮤니케이션은 없는 것이다. 만약 듣는 사람은 있지만 발신자가 수신자의 경험, 지식, 기대를 고려하지 않고 떠들어 대는 것.. 더보기
② 사례연구, 단일 책임 원칙 오래 전 질레트가 여러 분야로 사업을 다각화한 적이 있다. 자신의 경쟁력 있는 분야인 면도날, 면도기 사업을 벗어나 샴푸 등 일용품 사업에까지 뛰어든 것이다. 면도용품도 일용품이니 사업분야 간 시너지 효과가 있을 것이라는 판단이었던 듯하다. 하지만 실적은 나지 않았고 주가는 곤두박질쳤으며 결국은 많은 손실을 입은 채로 다각화한 사업분야를 정리해야만 했다. 현재는 면도용품 사업에 집중해서 세계 최고의 면도용품 회사라는 명성과 실적을 되찾게 되었다. 이처럼 많은 기업들이 위험을 분산시키고 실적을 향상시키기 위해서 다각화(diversification)를 한다. 하지만 많은 경우 다각화는 오히려 위험을 증가시키고 실적을 악화시킨다. 이를 들어 월 스트리트의 전설적인 투자가로 불리는 피터 린치(Peter Lync.. 더보기
① 개방-폐쇄 원칙 소프트웨어 설계의 묘미는 개발자가 작업하는 시스템의 창조자 역할을 할 수 있다는 것이다. 실세계의 경우 좋은 세상을 만들기 위해 적절한 질서, 정책, 의식 등이 전제돼야 하듯, 소프트웨어 설계의 경우는 객체와 객체간의 유기적 관계를 가장 효과적으로 구성하는 방법이 관건이 된다. 설계자는 자신의 문제영역에서 몇 가지 원리, 원칙, 패턴, 모델에 따라 문제들을 해결하면서 좋은 설계를 만들어간다. 이런 원리, 원칙들은 과거의 선배 설계자들이 시행착오를 거치면서 발견했던 것들이며 ‘설계자’란 종의 유전자에 묵시적으로 주입한 원칙들이다. 필자는 이번 연재를 통해 이 원칙들을 여러 측면에서 심도 있게 다룰 계획이다. 정상 세포와 암 세포는 거의 동일한 구조로 되어 있다. 단지 암 세포는 변이를 일으켜 정상 세포와 .. 더보기