2015년 10월 28일 수요일

Decorator Pattern

  •  Decorator Pattern ?
    • 한 객체를 여러개의 데코레이터로 감싸는 패턴을 데코레이터 패턴이라고 한다.
  •  why Decorator Patterm
    • oop의 특징 중 확장에는 열려있고 수정에는 닫혀있어야 한다는 원칙을 지키기 위한 패턴으로 등장.
    • 확장성을 증대시킬수록 다수의 서브 클래스가 존재하게 되었으며 , 클래스를 줄이게 되면 클래스의 수정이 빈번하게 일어나게 된다.

  • 데코레이션 패턴 형식 의 예

    • 다크로스트에 휘핑과 모카를 추가하여 금액을 청구하는 로직을 구현하는 예를 든다.
      • 가장 바깥쪽에 있는 데코레이터 whip의 cost() 호출한다.
      • whip에서는 가장자리 mocha의 cost()를 호출한다.
      • Mocha에서 다시 DarkRoast의 cost()를 호출한다.
      • DarkRoast에서는 가격을 반환한다.
      • Mocha에서는 DarkRoast의 리턴값과 모카값을 더해 반환한다.
      • whip에서는 mocha에서 받은 가격에 whip가격을 더해 최종가격을 반환.

    • 구현 클래스다이어그램
  • 데코레이터 패턴의 단점
    • 잡다한 클래스가 늘어나게 되어 가독성이 나쁘게 된다. 
    • 상속을 통해 확장성이 가능하지만 디자인 유연성 면에서 좋지 않다.
      • 데코레이션을 하나의 클래스에 데코레이션을 감싸는 형태이기 때문에 어떤 클래스로 감싸는 지를 명시해 주어야 한다는 것이다. 다른 형태로 감싸거나 조율함에 있어 유연성이 적다


참고 블로그 : 


Operating System : 3 . File I/O (UnBuffered I/O)


1. file Descriptors
  •  non negative integer
  •  파일에 할당된 고유번호 
  • 0 -> standard input 
  • 1 -> standard output
  • 2 -> standard error
2. open
  • 파일을 여는 POSIX 함수
  • READ_ONLY, WRITE_ONLY , BOTH OF THEM 가능
  • O_DSYNC :  하드웨어 I/O 종료시 까지 대기 하지만 file attribute가 업데이트되게까지 기다리지는 않는다. (데이터 동기화) 
  • O_RSYNC  :  다른 프로세서나 파일에 연관된 write가 종료될때까지 read function을 대기시킨다.( 읽기 동기화)
  • O_SYNC  : O_DSYNC와 동일하며 file attribute까지 업데이트시킨다.
3. create
  • 파일을 생성하고 open 할 수 있는 POSIX 함수
4.  close
  • open한 파일을 닫아주는 함수
5. lseek 

  • 해당 파일의 특정지점으로 이동시켜주는 Posix function
  • lseek (filedes, offset , whence)
  • whence 
    • SEEK_SET : offset 참고
    • SEEK_CUR : 현재 위치 + offset
    • SEEK_END : 마지막 위치 + offset
6. read / write 
  • open 된 파일을 읽거나 쓰는 function
  • standard I/O , unbuffered I/O
7.  I/O Efficiency
  • 데이터를 하나씩 가져오는 것보다 버퍼를 이용하여 I/O를 블럭단위로 가져오는 것이 더 효율적이다. 
  • buffered I/O가 더 효율적인 형태임.

8. File Sharing 
  • 각 프로세는 process table 을 가지고 있으며, 테이블 안에는 file descriptor flag, A pointer to a file table entry를 가지고 있다.
  • process table
    • file descriptor flag : 다방면의 file descriptor를 저장하는 공간
    • A pointer to a file table entry:  파일테이블을 가리키는 포인터
  • file table 
    • file status flag : I/O 방식을 제어 ex) non-blocking, sync etc....
    • current file offset : 파일의 위치
    • poiter to the v-node/i-node table entry for the file : 물리적인 파일의 위치정보를 가진 노드에 대한 포인터
[file Sharing]

9. Atomic operation
  • 두개의 프로세스가 하나의 function에 접근할때 레이스컨디션이 발생하지 않는 최소한의 연산.
  • Atomic 하게 함수를 작성하는 방법
    • Atomic operation 제공하는 함수들을 사용 
      • 이 연산이 발생되는 동안 인터럽트가 발생되지 않는다.
      •  현재 파일의 offset 이 업데이트 되지 않는다.
    • 존재와 생성을 조합하는 경우
      • open 함수를 통해 존재여부를 묻고 생성을 조합하는 경우 atomic 보장된다. 
      • 두개의 프로세스가 인터럽트인해 open함수를 동시에 통과한다고 해도 하나의 프로세스가 error를 보내주어야만 create 함수를 호출하게 하는 조합형식이다. 즉 최악의 경우는 두개 프로세스가 open하지 못하거나 적어도 두 프로세스 중 하나가 파일을 만들어서 열게된다.

10. dup and dup2

  •  현존하는 파일디스크립터를 복사하는 함수
    • 파일테이블 자체를 복사하는 것이 아닌 파일테이블 포인터 참조를 가져오는 형태
  • dup(filedes)
  • dup2(filedes1 , filedes2 )
    • dup2 는 atomic 함수 
    • 기존의 파일디스크립터를 닫고 새로 연결해주는 함수를 요청하기 떄문에 그 두연산중 인터럽트가 발생하는 것을 막기위해 atomic 함수로 작성한것으로 판단

11. sync, fsync, fdataSync 
  • I/O 다수 발생하면 write를 다수 발생시키기 보다는 메모리 버퍼에 유지하고 필요부분만 쓰는것이 더 효율적이다. 이러한 방식을 캐싱이라고 하는데, 나중에 쓰여진 데이터가 하드디스크에 실질적으로 써지는 것을 DELAYED WRITE라고 한다.
  • delayed write 3가지 방식이 존재
    • sync : 30초 마다 주기적으로 업데이트하여 모든 I/0를 하드디스크로 쓴다. 실질적으로 데이터가 다 쓰기까지 기다리지 않는다. 
    • fsync: 특정 하나의 파일이 다 쓸떄까지 기다린다. 
    • fdataSync : 특정 하나의 파일의 부분이 다 쓸떄까지 기다린다. 파일속성을 sync대상으로 여기지 않는다.
12. functl 

  • 이미 열려잇는 파일속성을 제어하는 함수.
  • int fcntl(filedes, cmd, argvs)
  • 5가지의 일을 한다. (cmd 속성)
    • 1. 존재하는 filedes 를 복사한다.(==dup , dup2)
      • 약간의 차이점은 존재한다.
    • 2. descriptor flag의 getter /setter 
      • 0 (don't close-on-exec)
      • 1 (close-on-exex)
        • exec family 함수 성공하면 filedes가 자동으로 close된다.
        • exec family function 이란 프로세스 이미지가 새로운 프로세스이미지로 바뀌는 것을 말한다. 
    • 3. getter/setter of file status flag 
      • 파일테이블의 status flag를 바꾸어 파일제어를 담당한다.
    • 4. getter/setter of ownership
      • SIGIO를 받는 프로세스 아이디와 그룹아이디를 가져오거나 할당한다.
        • SIGIO란 해당 파일디스크립터가 읽고 쓰기에 준비가 되었을때 보내는 시그널이다.
    • 5. getter/ setter of record locks


13. ioctl

  • i/o 함수의 모든것을 망라하는 함수이다.
  • 터미널이라 디스크, 소켓, 마그넷테이프등 디바이스를 제어하는 함수.



14. /dev/fd 

  • 실직적인 file descriptor 위치는 /dev/fd로 맵핑되어있다. 예를들어 stanadard 1번 은 /dev/1 로 맵핑되어 있다. 

2015년 10월 9일 금요일

용어 모음집

-- linear algebra
eigent value : 고유값

-- image processing


--- Servlet
DD : Deployment descriptor (배포자 디스크립터) // web.xml
J2EE : 어플리케이션 서버 (웹 컨테이너 와 EJB 컨테이너를 포함)
POJO : Plain old java Object


---Android
Daemon: 사용자가 직접 제어하지 않고 백그라운드에서 여러작업을 수행하는 프로그램
Context Manager :안드로이드의 시스템 서비스를 관리하는 중요한 프로세스

---- Linux
ctrl + F1  -> tty(terminal 1)으로 전환
ctrl + F7  -> x Window 으로 전환

Servlet (Web App Architecture)

Servlet Chapter 2

 - Web App Architecture


  • Container 
    • webApplication 통신하는 것을 지원
    • life cycle
    • multi threading 
    • declarative security
      • 컨테이너는 리퀘스트 와 리스판스 오브젝트를 생성 한다.
   *  Servlet 이란?
       서버의 하나의 기능을 명시하는 자바 프로그래밍 언어 클래스 
       사용자의 요구를 처리하고 응답하는 자바 프로그래밍 언어 클래스

   *  Servlet은 다중으로 존재한다.


  • MVC pattern
    • Model  -> 비즈니스 데이터와 조합하여 재사용한 가능한 순수한 자바 클래스 
    • Controller -> 해당 request에 적합한 비즈니스 모델과 view를 만들어 연결시켜준다.
    • View -> presentation영역으로 모델에서 출력된 값을 보여주는 곳