디자인 패턴 ( Design Pattern )의 구분

객체지향 방법론의 가장 큰 장점인 재사용성과 모듈성을 극대화시켜 실제 구현 과정에서의 해결 방안으로 제시 가능한 것으로 이를 적용하면 시스템 개발은 물론 유지 보수에서도 큰 효과가 있다.     

  • 상위 단계에서 적용될 수 있는 개념          
  • 디자인뿐만 아니라 시스템 구조를 재사용 하기 쉽게 만들 수 있다.          
  • 개발에 따른 산출 문서를 보다 향상시킬 수 있다.          
  • 불명확한 클래스의 기능, 객체간의 부적절한 연관 관계 등을 제거해 현존하는 시스템에 대한 유지 보수도 용이하다.          
  • 제대로 만들어진 디자인을 보다 빠르게 얻어낼 수 있는 이점이 있다.          
  • 일반적인 설계 문제에 대한 솔루션을 제공하는 객체와 클래스와의 연관 관계를 묘사한 것이다.

[패턴의 분류와 종류]


기본 패턴(Fundamental Design Patterns)

  • 디자인 패턴 중에서도 가장 기본인 동시에 가장 중요한 패턴                 
  • 종류 : 델리게이션(Delegation) 패턴, 인터페이스 패턴, 이뮤터블(Immutable)패턴, 마커 인터페이스(Marker Interface) 패턴, 프록시(Proxy) 패턴 등

    생성 패턴(Creational Patterns)

  • 객체의 생성 방식을 결정하는데 포괄적인 솔루션을 제공하는 패턴                  
  • 클래스 정의와 객체 생성 방식을 구조화, 캡슐화하는 방법을 제시한다.                                  
  • 객체 생성 과정을 추상화시킨다는 특성을 갖고 있으며 클래스의 재사용을 위해 상속보다는 컴포지션 기법을 보다 많이 사용한다.                                  
  • 기본원리
                                    ① 시스템에서 사용하는 클래스 정보를 캡슐화
                                    ② 클래스에 의해 객체가 생성되는 방식                                  
  • 이점 : 전체적인 시스템 구성의 유동성이 향상되어 객체 행성 방식이 다양한 구조로 진행될 수 있다. 예를 들어, 객체의 구성을 컴파일 타임에 정적으로 정의할 수 있으며 필요에 따라 런타임에 동적으로 구성할 수 있다.                                  
  • 종류 : 팩토리 메쏘드(Factory Method) 패턴, 추상화 팩토리(Abstract Factory) 패턴, 프로토타입(Protytype) 패턴, 싱글턴(Singleton) 패턴, 오브젝트 풀(Object Pool) 패턴 등    

    분류 패턴(Partitioning Patterns)

  • 분석 단계에서 일반적으로 생기는 문제를 해결하는데 적합하다.                                  
  • 복잡한 행위자(Actors)를 분류하거나 비교적 큰 기능을 분류해 여러 클래스로 정의하는 방식을 제시한다.                                  
  • 종류 : 계층적 초기화(Layered Initialization) 패턴, 필터(Filter) 패턴, 컴포지트(Composite) 패턴 등

    구조화 패턴(Structural Patterns)

  • 다른 기능을 가진 객체가 협력을 통해 어떤 역할을 수행할 때, 객체를 조직화시키는 일반적인 방식을 제시한다.                                  
  • 클래스와 객체가 보다 대규모 구조로 구성되는 방법에 대한 해결안을 제시한다.                                 
  • 별도로 구성된 클래스 라이브러리를 통합하는데 유용하다.                                  
  • 생성 패턴과 달리 새로운 기능을 구현하기 위해 객체를 구성하는 방식 자체에 초점이 맞춰져 있다.                                
  • 런타임에 객체 컴포지션 구조를 변경할 수 있으며, 이를 통해 객체 구성에 유동성과 확작성을 추가할 수 있다.                                  
  • 종류 : 어댑터(Adapter) 패턴, 이터레이터(Iterator) 패턴, 브리지(Bridge) 패턴, 퍼케이드(Facade) 패턴, 플라이웨이트(Flyweight) 패턴, 디이나믹 링키지(Dynamic Linkage) 패턴, 가상 프록시(Virtual Proxy) 패턴 등  

    행위 패턴(Behavioral Patterns)

  • 객체의 행위를 조직화(organize), 관리(manage), 연합(combine)하는데 사용되는 패턴                                  
  • 객체간의 기능을 배분하는 일과 같은 알고리즘 수행에 주로 이용된다.                                  
  • 단지 객체나 클래스에 대한 유형을 정의하는 것이 아니라 그들 간의 연동에 대한 유형을 제시한다.                                 
  • 런타임에 따르기 어려운 복잡한 제어 흐름을 결정짓는데 사용할 수 있다.                                  
  • 객체의 인터커넥트(intercnnnect)에 초점을 맞춘 패턴        

  • 2007/06/19 19:18 2007/06/19 19:18
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    넷빈즈 성능 향상 - 퍼포먼스 튜닝 팁 ( NetBeans performance Tuning Tip )

    이클립스 퍼포먼스 팁 이란 포스팅을 통해 이클립스의 성능향상을의한 몇가지 방법을 소개했는데요..
    이번에는 제가 좋아하는 Netbeans에도 성능향상 팁을 소개 하도록 하겠습니다.

    넷빈즈의 경우 넷빈즈 가동시 jvm옵션을 추가 하거나 netbeans.conf 파일을 수정함으로써 성능 향상을 꾀할 수 있는데요..

    넷빈즈 기동시 jvm옵션을 주는 방법은
        유닉스 계열이라면
           ./netbeans -J-Xmx256m 

        윈도우즈 계열이라면
            netbeans.exe -J-Xmx256m

    와 같이 실행 하면 됩니다.
    netbeans.conf  파일의 수정은 [넷빈즈 설치 디렉토리]/etc ( C:\Program Files\netbeans-5.5\etc )
    아래에 netbeans.conf 파일을 편집기로 열어 수정하시면 됩니다.

    그럼, 적용가능한 명령 옵션을 설명 드리겠습니다.


    일반적으로 쓸만한 옵션들

  • -J-Xverify:none - 자바 바이트코드 검증을 하지 않습니다. 그럼으로써 클래스로딩 속도를 올릴 수 있습니다.
    이 옵션으로 넷빈즈 기동 시간을 줄일 수 있습니다. 이 옵션을 사용하지 않을 이유가 없죠.
  • -J-Xms32m - 이 옵션을 통해 자바 버추얼머신은 최소한의 힙 사이즈 32메가바이트를 확보하고 시작합다.
    이 옵션으로 (필요한 경우 수행하게되는) 메모리 힙사이즈를 늘려가는 작업을 줄일 수 있으므로 이 옵션으로 넷빈즈 기동시간을 줄일 수 있습니다. 
  • -J-Xmx256m - 이 옵션은 자바 버추얼 머신이 다룰 수 있는 최대 힙 메모리를 지정합니다. 초기값은 128메가
    이지만 시스템에 여분의 메모리용량이 있다면 이 값을 늘여서 넷빈즈의 성능 향상을 꾀 할 수 있습니다.
    Note: 물리적인 메모리 용량에 근접하거나 그보다 큰 값을 세팅하진 마세요. 그럴경우 하드디스트 스왑이 일어나기 때문에 성능이 더 떨어지게 됩니다.


    좀 더 색다른 옵션들

  • -J-XX:+UseConcMarkSweepGC or -J-XX:+UseParNewGC - 가비지 컬렉션이 작업을 방해 하면
    이 옵션들을 바꿔가며 사용해 보실것을 권합니다. 이 옵션은 버추얼머신이 다른 알고리즘으로 major 가비지 콜렉션을 동작하게 합니다.
    이 GC옵션과 함께  -J-XX:+CMSClassUnloadingEnabled 과 -J-XX:+CMSPermGenSweepingEnabled 옵션을
    추가 할 수 있습니다. 이는 클래스 unloading기능을 활성화 합니다.
    (위에 소개한 GC옵션을 사용할 경우 클래스 언로딩기능은 디폴트로 비활성화 됩니다.)
  • -XX:+UseAdaptiveSizePolicy - 이 옵션으로 가비지 콜렉션 성능과 메모리 풋프린트 성능을 향상 시켜 줄 수 있습니다.
    이는 JDK 5.0에서 garbage collector ergonomics의 구현물 중 일부 입니다.
  • -J-XX:+UseParallelGC - 고용량 메모리를 장착한 단일 프로세스 시스템에서 테스트 한 결과,
    이 옵션을 사용 함으로써  minor 가비지 콜렉션의 주기를 줄일 수 있습니다.  
    Note: 이 옵션은  -J-XX:+UseConcMarkSweepGC 옵션과 상호 배타적인 옵션입니다. .
  • -J-XX:+PrintGCDetails - 이 옵션은  -J-verbose:gc 과 유사하여 성능을 향상 하진 않지만 퍼포먼스 튜닝에 유용한
    시스템 진단 데이타를 제공 합니다. 또다른 방법으로는 다른 모니터링 툴이나 넷빈즈 프로파일러를 사용하는 것입니다. 
  • -J-Djava.net.preferIPv4Stack=true - 이 옵션은 네트워크 코드에서 IPv6 stack의 사용을 제한하고 그럼으로써
    inet address 를 해석 시간을 줄일 수 있습니다. 이 옵션은 시스템에  IPv6 이 설치는 되어 있지만 사용하지 않을경우에만 유용합니다.
    Note: 이하의 링크에는  IPv6 와 관련한 다른 문제들을 소개하고 있습니다.- 예제 보기 discussion on interaction between fwbuilder and Java apps


    드라마틱한 GUI성능향상

  • -Dsun.java2d.opengl=true - OpenGL을 지원하는 hardware-accelerator 에서 Java 2D 가 OpenGL가속을 사용하도록 합니다. 
    JDK5.0 의 새로운 기능에 대한 상세 설명은 Java 2D(TM) Technology documentation. 를 참조 하세요.
  • -Dsun.java2d.d3d=false - 이 옵션으로 몇몇 구형 하드웨어에 대한 DirectDraw 문제와 성능 문제를 해결 할 수 있습니다.
  • -Dawt.nativeDoubleBuffering=true - 이 옵션은 Swing이 OS의 double buffering 기능을 활용 할 수 있도록 해 줍나다.
    X의 터미널 서버등에서는 동작하지 않겠지만 로컬 Swing프로그램에서는 매우 유용한 옵션이 될 것입니다.
  • Font anti-aliasing 스윙 위젯은  -Dswing.aatext=true 옵션으로 폰트 안티엘리어싱 기능을 켤 수 있습니다.
    이 옵션은 리눅스 시스템에서  J2D_PIXMAPS=shared 옵션과 함께 사용함으로써 성능 향상을 꾀할 수 있습니다.
    (이 옵션은 현재 넷빈즈 런처(platform5/lib/nbexec)에의해 넷빈즈 구동시 디폴트 옵션으로 채택되어 있으므로 특별히 세팅하지 않아도 됩니다. )




  • 2007/06/19 18:32 2007/06/19 18:32
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    리눅스 스트리밍 서버에 관한 솔류션 ( Linux Streaming Server Solution )

    1. 기본적으로 real 은 되신다는 것을 아실 것이고

    2. 미국사이트를 찾아보니 리눅스 스트리밍 전문 서비스들이 있더군요.
    http://shoutcast.serverroom.us/?OVRAW=linux%20streaming&OVKEY=linux%20stream%20media%20server&OVMTC=advanced
    이곳에서는 nullsoft 의 shoutcast 를 서버로 사용하더군요.
    클라이언트는 윈도우미디어 플레이어대신 winamp을 사용하구요. PC, MAC, LINUX 에서 모두 사용되구요. ( http://www.nullsoft.com/ntv/publicaccess/ )
    http://www.shoutcast.com/download/broadcast.phtml
    가격도 저렴한편이네요. 50메가하드+30기가트래픽에 월11.99달러네요.

    3. 오디오스트리밍(MP3) 는 icecast 를 가직고 하나봐요. 셋업하는 방법이 나와있네요 참고하세요.
    http://www.yolinux.com/TUTORIALS/LinuxTutorialAudioStreaming.html

    4 다음은 MPEG4 스트리밍에 관한 내용이고요
    http://www.linuxjournal.com/article/6720

    5. BYU브로드캐스팅은 TV 라디오와 웬만하게 알려진 파일들은 대부분 제어하는 것 같습니다. 
    http://www.byubroadcasting.org/


    6. 요즘 야후블로그의 비디오나 cj쇼핑에서 나오는 실시간방송은 한국에서 만든 건데
    seevideo라는 플레이어로 dideonet.com 에서 만들었죠
    샘플과 asp파일 자바스크립트 파일을 받으시려면 다음을 방문하세요.
    http://www.seemedia.co.kr/
    seevideo는 리눅스기반 서버에서만 사용이되고, 클라이언트는 윈도우 사용자들을 위해 개발이 되었는 데, AVI파일을 사용하고 있습니다. 기능은 메디아플레이어에 비해 훨씬 뛰어나지만 플레이중 다른 프로그램을 사용하면 시스템이 불안정해지는 것이 흠이더군요.

    7. 가장 강력한 것은 프랑스에서 개발된 VLS streaming 입니다.
    VLS는 그간 리눅스의 문제점으로 지적됐던 asf wmv divx avi 등을 스트리밍 할수 있으며, 제작자에의하면 별도의 미디어 서버가 필요없이 리눅스 웹서버에서 바로 작동을 한다고 합니다. VLS는 무료이며 소스가 공개되어 있습니다.
    가이드 : http://www.videolan.org/doc/vls-user-guide/en/vls-user-guide-en.html
    다운로드 : http://www.videolan.org/streaming/download-vls-sources.html

    원문 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=44342&sca=%C1%A4%BA%B8&page=3

    2007/06/19 15:57 2007/06/19 15:57
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다