진리는어디에 (291) 썸네일형 리스트형 Flyweight Pattern 의도 작은 크기의 객체들의 수가 폭발적으로 늘어나는 것을 방지하기 위해 공유 개념을 도입. 동기 객체 지향적으로 설계함으로써 많은 유연성과 재활용성을 기대 할 수 있기는 하지만 늘어만 가는 클래스들을 보고 있노라면 그 비용이 만만치 않음을 느낀다. 클래스를 작은 단위 요소까지 나누어서 설계를 한다면 어플리케이션의 응용성을 높일 수 있고, 해당 요소들을 일관성 있게 다룰 수도 있으며, 요소들에 새로운 기능을 추가하거나 수정한다고 해도 다른 기능에 아무런 영향을 주지 않을 수 있다. 하지만 너무 작은 요소들까지 객체로 다룰때 폭발적으로 늘어나는 객체를 처리 하는 비용은 만만치가 않다. Flyweight 패턴은 이러한 문제를 '공유'를 통해 해결하고자 하는 것이다. 구조참여 객체 * Flyweight - ex.. Composite Pattern 의도 '전체 – 부분'을 표현하기 위해 객체들을 트리구조로 묶을 수 있다. 클라이언트 코드는 각 개별적인 객체(부분)와 다른 객체를 포함하는 객체(전체)를 동일한 인터페이스를 통해 사용할 수 있다. 구조 위의 모델에서 Composite 클래스는 Component 인터페이스를 포함하는 형식으로, 실제적으로 Component 인터페이스에는 Leaf나 Composite의 인스턴스를 가리키게 된다. 이런 구조를 인스턴스 다이어그램으로 표현 하면 아래와 같다. 하나의 집합객체(Composite)가 Leaf나 Composite를 포함하고 그것은 재귀적으로 계속 이어진다. 모든 인스턴스들은 Component 인터페이스를 구현하고 있기 때문에 클라이언트에서는 Leaf와 Composite에 구분없이 동일하게 취급이 가능.. RST 메시지 1. Connect 시도시 목적 host와 port에 connection을 대기하는(listen)하는 프로세스가 없는 경우 발생 2. TCP가 현재 맺고 있는 연결을 날려 버리고자 하는 경우 발생. 3. TCP가 이전에 맺고 있던 연결이 더 이상 유효 하지 않다고 알리는 경우 발생 XML 기초 이번 포스트의 "XML의 의미"라고 적은 것은 XML의 기본적인 개념과 기능들을 알아 보고 XML이라는 도구를 어떻게 우리 생활에 도움이 되도록 사용 할 수 있는지 알아 보고자 함이다. 책이나 기타 웹문서에도 XML에 대한 설명들이 잘 나와 있지만, 여기에는 XML을 공부하면서 개인적으로 느꼈던 XML의 특성과 장점을 들어 어떻게 우리 생활에 XML이라는 도구가 도움을 줄 수 있는지 알아 보고자 한다. XML 기능 XML이 어떻게 우리 생활에 도움이 되는지 알아보기 전에 XML이 할 수 있는 일에 대해서 먼저 알아 보도록 하자. 흔히 우리는 XML이라고 하여 간단한 태깅 기능을 제공하는 문서만을 생각하지만 개인적으로는 XML, XPath, XSTL, Schema or DTD들을 묶은 하나의 패키지 형태가.. 정규 표현식(Regular Expressions) /** 개인적으로 UNIX/Linux 환경에서 작업을 하다 보면 정규 표현식을 사용해야 하는 경우가 종종 발생한다. 정규 표현식을 사용하지 않는다고 하더라도 크게 못할일은 없지만, 무식하면 손발이 고생한다는 말을 절실하게 느끼게 된다. 이왕이면 할일이면 고생스럽게 손노가다를 하느니 간단하게 정규표현식을 이용해서 처리하면 더 좋지 아니한가? 그리고 한가지!! 나도 매일 착각하는 것이지만 정규 표현식에 적용되는 것은 문자 하나 단위지 문자열 단위가 아니라는 것!! 잊지 말아야 하겠다.. */ . 개행문자를 제외한 어떠한 문자와도 매칭 * 이전 표현식과 매칭되는 문자가 0개 이거나 그 이상이 있음 + 이전 표현식과 매칭되는 문자가 1개 이거나 그 이상이 있음 ? 이전 표현식과 매칭되는 문자가 0개 이거나 1개.. 커널 오브젝트 - 핸들 /** 갈 수록 윈도우와 리눅스 사이에서 왔다 갔다 해야 할 일이 많아 지고 있다. 오늘은 윈도우의 커널 오브젝트(Kernel Object)라는 것에 대해서 알아 보도록 하자. */ 유저 모드와 커널 모드 '커널 오브젝트'에 대해 알아보기 전에 '유저 모드'와 '커널 모드'의 실행이라는 것에 대해서 알아 보도록 하자. 프로그램을 실행하게 되면 사용자가 직접 접근할 수 있는 유저 영역과 시스템 콜등을 통해서만 접근할 수 있는 커널 영역이 있다. 주로 커널 영역에는 운영체제, 프로세스간에 공유되는 데이터들이 보존되어 함부로 메모리 억세스를 할 수 없도록 제한하고 굳이 그 자원을 사용하기 위해서는 필수적으로 커널에게 자원을 요청하여 그에 대해 구분 할 수 있는 무엇인가를 얻어와 커널의 허가 아래서 사용해야 한.. connected UDP socket 일반적으로 UDP는 비연결 지향형 프로토콜로 알려져 있다. 맞는 말이다. 하지만 디폴트 UDP에 connect라는 것을 첨가하여 보다 편리 하게 쓸 수 있는 것도 사실이다. UDP소켓에다 connect 함수를 사용 한다는 것은 TCP의 그것 처럼 동작한다는 뜻은 아니다(Three-way handshaing 이라던지 하는 과정 들이 없다). 다만 커널에 소켓이 향하고 있는 주소를 기록해 두고 send 할 때 마다 주소를 넘겨 줘야 한다는 것 외의 모든 동작방법이나 기타등등은 다 똑같다. 자꾸 말을 번복하는 것 같지만, 내부에서 돌아가는 것은 다 똑같으나 사용법에 있어서 connected UDP와 unconnected(default) UDP는 다소 다른 점이 있다. 더 이상 목적지 주소와 포트를 지정 할 필.. [C++] operator 사용하기 /** stl을 좀 더 제대로 사용하고자 하니, functor가 필요하고, functor를 사용하고자 하니 operator가 필요 했다. 평소 operator를 잘 사용하지 않는 편에다가 'operator ()'라는 것이 익숙하지 않기에 그에 대한 테스트 코드를 작성 해 보았다. */ #include class __testOperator { public : __testOperator() { std::cout Threads Scheduling /** 이래저래 먹고 사는데 바쁘다 보니 글하나 올리기도 빡세구나. 아직도 해야 할 일이 많은데 내가 생각하는 뭔가를 정리하고 올린다면 시간이 더 많이 걸릴 것 같고, 오늘은 웹에서 떠돌아 다니는 원문을 간단하게 해석해 보는 것으로 블로깅을 마무리 해야겠다. 주제는 쓰레드 스케줄링(thread scheduling)에 관련한 것으로, 내가 멀티 쓰레드를 이용해서 뭔가를 하는데 아무리해도 성능이 안나오길래 혹시 scheduling에 관련한 문제가 있지 않나 해서 조사하다 찾은 문서를 설명 할 것이다. 원론적인 스케줄링에 관련된 이야기는 아니고, 여러가지 스케줄링 기법이 있고, 내가 생성한 쓰레드가 어떤 스케줄링 알고리즘을 사용하게 설정 하느냐 하는 API 사용법 정도라고 생각하면 되겠다. 보다 자세한 쓰레드.. RTP(RealTime Transfer Protocol) 일반적으로 생각하기에 '실시간 전송 프로토콜'이라는 단어를 말하면 A라는 호스트에서 어떤 이벤트가 발생하면 그와 동시에 B라는 상대편에서도 그 이벤트에 대한 인식을 할 수있을 것을 생각하곤 한다. 하지만 네트워크 상에서의 물리적인 제약으로 그런 실시간은 불가능하다. 아주 좋게 가정해서 전파가 빛의 속도로 전송 된다고 가정하자. 빛은 1초에 지구를 7바퀴 반을 돈다고 한다. 계산을 편하게 하기 위해서 1초에 10바퀴를 돈다고 하자. 그럼 우리 나라에서 지구 반대 편에 있는 미국으로 데이터를 전송하기 위해서는 1/10의 초의 절반 1/20초가 걸린다. 이것는 우리 나라에서 미국으로 직선으로 아무런 방해도 받지 않고 날아가는 아주 나이스한 경우의 이야기고, 미국 까지 가는 도중에는 수많은(?) 라우터를 거쳐 .. 이전 1 ··· 24 25 26 27 28 29 30 다음