신호처리

2026년 4월 22일 09:30분

민수기 10장의 나팔은 신호 체계입니다. 나팔 수와 소리 방식에 따라 다른 명령이 전달됩니다. 나는 신호 코드를 키로, 실행 핸들러를 값으로 등록하는 디스패처를 만들었습니다.

package com.jesusbornd.numbers;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Runnable;

public class Numbers_10_Chapter_Lv2 {

    static class TrumpetDispatcher {
        private final Map<String, Runnable> handlers = new HashMap<>();

        TrumpetDispatcher on(String signal, Runnable handler) {
            handlers.put(signal, handler);
            return this;
        }

        void dispatch(String signal) {
            Runnable handler = handlers.get(signal);
            if (handler != null) {
                System.out.println("신호: [" + signal + "]");
                handler.run();
            } else {
                System.out.println("신호: [" + signal + "] → 알 수 없는 신호");
            }
        }
    }

    public static void main(String[] args) {
        TrumpetDispatcher dispatcher = new TrumpetDispatcher()
            .on("BOTH_LONG",   () -> System.out.println("  → 회중 소집"))
            .on("ONE_LONG",    () -> System.out.println("  → 동쪽 진 출발"))
            .on("TWO_LONG",    () -> System.out.println("  → 남쪽 진 출발"))
            .on("ALARM",       () -> System.out.println("  → 전쟁/위험 경보"))
            .on("FEAST",       () -> System.out.println("  → 절기/희생제 시작"));

        String[] signals = {"BOTH_LONG", "ALARM", "FEAST", "UNKNOWN"};
        for (String s : signals) dispatcher.dispatch(s);
    }
}

from typing import Callable

class TrumpetDispatcher:
    def __init__(self):
        self._handlers: dict[str, Callable[[], None]] = {}

    def on(self, signal: str, handler: Callable[[], None]) -> "TrumpetDispatcher":
        self._handlers[signal] = handler
        return self

    def dispatch(self, signal: str):
        print(f"신호: [{signal}]")
        handler = self._handlers.get(signal)
        if handler:
            handler()
        else:
            print("  → 알 수 없는 신호")


if __name__ == "__main__":
    dispatcher = (
        TrumpetDispatcher()
        .on("BOTH_LONG", lambda: print("  → 회중 소집"))
        .on("ONE_LONG",  lambda: print("  → 동쪽 진 출발"))
        .on("TWO_LONG",  lambda: print("  → 남쪽 진 출발"))
        .on("ALARM",     lambda: print("  → 전쟁/위험 경보"))
        .on("FEAST",     lambda: print("  → 절기/희생제 시작"))
    )

    for signal in ["BOTH_LONG", "ALARM", "FEAST", "UNKNOWN"]:
        dispatcher.dispatch(signal)

Comments

Avatar
 2026년 4월 22일 20:08분

나팔 소리 하나로 상황이 전달되는 단순함이 오히려 강력하더라고요.



Search

← 목록으로