검색결과 리스트
글
커맨드 패턴은 각각의 요구 사항을 캡슐화 하여 그 내용을 실행 시키게 한다.
예를 들어 불을 켜거나 끌 때에 각기 해당 내용이 실행되는 것을 생각해보면 될 것이다.
전문적인 용어 상황에서 본다면
클라이언트의 요구에 의해 인보커는 그 요청에 대한 내용을 실행하도록 리시버에 요청을 하면 리시버는 그 내용을 실행한다.
커맨드 패턴은 주로 스케쥴러, 스레드 풀, 큐 같은 용도에서 쓸 수가 있고
순차적으로 이루어진 작업임으로 이 전 데이터로 돌리기도 쉬운편이다.
Main에서 먼저 Remote(인보커)를 생성하고, 그 후 리시버(Command)에 특정 행동들을 요구한다(Lignt, Door).
VS2008에서의 다이어그램 구성은 저기 까지 나옴으로 샘플을 참조하는 것이 좋을 것 같다.
예를 들어 불을 켜거나 끌 때에 각기 해당 내용이 실행되는 것을 생각해보면 될 것이다.
전문적인 용어 상황에서 본다면
클라이언트의 요구에 의해 인보커는 그 요청에 대한 내용을 실행하도록 리시버에 요청을 하면 리시버는 그 내용을 실행한다.
커맨드 패턴은 주로 스케쥴러, 스레드 풀, 큐 같은 용도에서 쓸 수가 있고
순차적으로 이루어진 작업임으로 이 전 데이터로 돌리기도 쉬운편이다.
Main에서 먼저 Remote(인보커)를 생성하고, 그 후 리시버(Command)에 특정 행동들을 요구한다(Lignt, Door).
VS2008에서의 다이어그램 구성은 저기 까지 나옴으로 샘플을 참조하는 것이 좋을 것 같다.
설정
트랙백
댓글
글
싱글톤 패턴..
유일하게 하나의 정의만 있어야 하는 패턴이다.
일반적으로 우리가 쓰는 싱글톤은 다음과 같이 쓸 것이다.
Object m_obj;
Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
하지만 여기에서 문제가 있다.
멀티스레드에 의해서 생기는 문제로 동기화가 되지 않아 여러번 생성이 된다는 경우가 종종 생긴다.
그럴 경우에는 분명 데이터가 뒤죽 박죽으로 흘러 갈 것이다.
그 다음으로 쓰는 방법이 아마 일반적으로 static 을 이용 할 것이다.
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
이는 어느 정도 문제를 해결해 주지만 한번도 쓰이지 않을 경우 메모리만 선점하고 있다는 문제가 생긴다.
필자도 저 방식으로 종종 쓰는 경우가 많다(쓰레드 환경 제외)
멀티쓰레드라면 아마 이 방법이 제일 좋을 것 같다. lock 키워드를 이용하는 것이다.
(lock은 monitor와 같이 동기화를 이용 할 때 쓰는 키워드이다.)
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
lock(m_obj)
{
m_obj = new Object
}
return m_obj;
{
}
이 방법은 인스턴트 생성시 걸리는 시간 때문이다. 이렇게 lock을 걸어 둔다면 멀티쓰레드 환경 상에서는 최소한의 속도가 유지 될 것이다.
유일하게 하나의 정의만 있어야 하는 패턴이다.
일반적으로 우리가 쓰는 싱글톤은 다음과 같이 쓸 것이다.
Object m_obj;
Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
하지만 여기에서 문제가 있다.
멀티스레드에 의해서 생기는 문제로 동기화가 되지 않아 여러번 생성이 된다는 경우가 종종 생긴다.
그럴 경우에는 분명 데이터가 뒤죽 박죽으로 흘러 갈 것이다.
그 다음으로 쓰는 방법이 아마 일반적으로 static 을 이용 할 것이다.
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
이는 어느 정도 문제를 해결해 주지만 한번도 쓰이지 않을 경우 메모리만 선점하고 있다는 문제가 생긴다.
필자도 저 방식으로 종종 쓰는 경우가 많다(쓰레드 환경 제외)
멀티쓰레드라면 아마 이 방법이 제일 좋을 것 같다. lock 키워드를 이용하는 것이다.
(lock은 monitor와 같이 동기화를 이용 할 때 쓰는 키워드이다.)
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
lock(m_obj)
{
m_obj = new Object
}
return m_obj;
{
}
이 방법은 인스턴트 생성시 걸리는 시간 때문이다. 이렇게 lock을 걸어 둔다면 멀티쓰레드 환경 상에서는 최소한의 속도가 유지 될 것이다.
설정
트랙백
댓글
글
데코레이터 패턴.
메인 객체에 각기 더 올리고자 하는 객체들을 덧 씌워서 그 결과를 나타낸다.
쉽게 생각하면 커피를 떠올리면 된다.
에스프레소에 우유를 넣고 모카를 넣고 원하는 취향대로 하면 하나의 제품이 나온다.
특징이라고 하면 한 객체를 여러 데코레이터들로 감쌀 수 있다는 것과
자신이 장식한 객체에 어떤 행동을 위임 또는 추가적인 작업을 할 수 있다.
즉 언제든 객체를 감쌀 수가 있기에 프로그램 실행 중 유동적으로 데코레이터를 이용 할 수 있다.
아래는 다이어그램과 샘플 코드 이다.
메인 객체에 각기 더 올리고자 하는 객체들을 덧 씌워서 그 결과를 나타낸다.
쉽게 생각하면 커피를 떠올리면 된다.
에스프레소에 우유를 넣고 모카를 넣고 원하는 취향대로 하면 하나의 제품이 나온다.
특징이라고 하면 한 객체를 여러 데코레이터들로 감쌀 수 있다는 것과
자신이 장식한 객체에 어떤 행동을 위임 또는 추가적인 작업을 할 수 있다.
즉 언제든 객체를 감쌀 수가 있기에 프로그램 실행 중 유동적으로 데코레이터를 이용 할 수 있다.
아래는 다이어그램과 샘플 코드 이다.
RECENT COMMENT