커맨드 패턴의 사용 예 1: 요청 큐잉
Prof. Jong Min Lee이(가) 9일 전에 추가함
커맨드 객체(Command Object)의 개념¶
프로그래밍에서 커맨드 객체는 계산 작업(수신자와 일련의 동작)을 하나의 객체로 포장하여 일급 객체처럼 전달할 수 있게 해줍니다.
이러한 커맨드는 나중에 다른 스레드에 의해 실행될 수도 있습니다.
이 방식은 다음과 같은 다양한 응용 분야에서 매우 유용합니다:
- 스케줄러
- 스레드 풀
- 작업 큐(Job Queue)
예시: 작업 큐¶
- 한쪽 끝에서 커맨드들이 큐에 추가됩니다.
- 반대쪽에서는 여러 개의 스레드가 큐에서 커맨드를 꺼내 실행합니다.
- 각 스레드는 다음과 같은 스크립트를 따릅니다:
- 큐에서 커맨드를 하나 꺼낸다.
- 해당 커맨드의
execute()메서드를 호출한다. - 호출이 완료될 때까지 기다린다.
- 커맨드 객체를 폐기한다.
- 새로운 커맨드를 꺼낸다.
이러한 구조는 비동기 처리와 병렬 작업을 효율적으로 수행할 수 있게 해줍니다.
답글 (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 함수는 변수에 할당되고, 다른 함수의 인자로 전달되며, 실행 결과로 반환됩니다. 이처럼 함수가 값처럼 자유롭게 다뤄질 수 있기 때문에 일급 객체라고 부릅니다.
커맨드 패턴과의 연결¶
커맨드 패턴에서 명령을 객체로 포장하는 이유도 바로 이 "일급 객체" 성질을 활용하기 위함이에요. 명령을 큐에 넣거나, 스레드에 전달하거나, 저장했다가 나중에 실행할 수 있는 건 모두 이 덕분이죠.