프로젝트

일반

사용자정보

커맨드 패턴의 사용 예 1: 요청 큐잉

Prof. Jong Min Lee이(가) 9일 전에 추가함

커맨드 객체(Command Object)의 개념

프로그래밍에서 커맨드 객체는 계산 작업(수신자와 일련의 동작)을 하나의 객체로 포장하여 일급 객체처럼 전달할 수 있게 해줍니다.

이러한 커맨드는 나중에 다른 스레드에 의해 실행될 수도 있습니다.

이 방식은 다음과 같은 다양한 응용 분야에서 매우 유용합니다:

  • 스케줄러
  • 스레드 풀
  • 작업 큐(Job Queue)

예시: 작업 큐

  • 한쪽 끝에서 커맨드들이 큐에 추가됩니다.
  • 반대쪽에서는 여러 개의 스레드가 큐에서 커맨드를 꺼내 실행합니다.
  • 각 스레드는 다음과 같은 스크립트를 따릅니다:
    1. 큐에서 커맨드를 하나 꺼낸다.
    2. 해당 커맨드의 execute() 메서드를 호출한다.
    3. 호출이 완료될 때까지 기다린다.
    4. 커맨드 객체를 폐기한다.
    5. 새로운 커맨드를 꺼낸다.

이러한 구조는 비동기 처리와 병렬 작업을 효율적으로 수행할 수 있게 해줍니다.


답글 (1)

일급 객체(first-class object) 의미 - Prof. Jong Min Lee이(가) 9일 전에 추가함

일급 객체(First-Class Object)란 프로그래밍 언어에서 다른 일반적인 값들과 동일하게 취급할 수 있는 객체를 말합니다. 즉, 함수나 명령 같은 요소를 숫자나 문자열처럼 자유롭게 다룰 수 있다는 뜻이에요.

일급 객체의 조건

어떤 요소가 일급 객체로 간주되려면 다음 조건을 만족해야 합니다:

  • 변수에 할당할 수 있다
    예: let f = someFunction;
  • 함수의 인자로 전달할 수 있다
    예: doSomething(f);
  • 함수의 반환값으로 사용할 수 있다
    예: return f;
  • 데이터 구조에 저장할 수 있다
    예: 배열이나 객체에 포함시키기
  • 동등 비교의 대상이 될 수 있다
    예: f === anotherFunction

예시: 자바스크립트에서 함수는 일급 객체

const greet = function(name) {
  return "Hello, " + name;
};

function callWithName(fn) {
  return fn("Jong");
}

console.log(callWithName(greet)); // "Hello, Jong"

여기서 greet 함수는 변수에 할당되고, 다른 함수의 인자로 전달되며, 실행 결과로 반환됩니다. 이처럼 함수가 값처럼 자유롭게 다뤄질 수 있기 때문에 일급 객체라고 부릅니다.

커맨드 패턴과의 연결

커맨드 패턴에서 명령을 객체로 포장하는 이유도 바로 이 "일급 객체" 성질을 활용하기 위함이에요. 명령을 큐에 넣거나, 스레드에 전달하거나, 저장했다가 나중에 실행할 수 있는 건 모두 이 덕분이죠.

    (1-1/1)