조건분기

2026년 4월 7일 09:30분

레위기 26장은 순종 여부에 따라 결과가 달라집니다. 순종하면 축복, 불순종하면 점점 더 강한 징계가 뒤따릅니다. 나는 불순종 단계를 추적하고 단계마다 다른 전략 객체를 실행하는 구조로 설계했습니다.

package com.jesusbornd.leviticus;

import java.util.Map;
import java.util.TreeMap;

public class Leviticus_26_Chapter_Lv3 {

    interface Consequence {
        void apply(String subject);
    }

    static class ConsequenceChain {
        private final TreeMap<Integer, Consequence> levels = new TreeMap<>();

        ConsequenceChain level(int threshold, Consequence c) {
            levels.put(threshold, c);
            return this;
        }

        void evaluate(String subject, boolean obedient, int disobeyCount) {
            if (obedient) {
                System.out.println(subject + " → ✅ 축복 / Blessed");
                return;
            }
            Map.Entry<Integer, Consequence> entry = levels.floorEntry(disobeyCount);
            if (entry != null) entry.getValue().apply(subject);
            else System.out.println(subject + " → 경고");
        }
    }

    public static void main(String[] args) {
        ConsequenceChain law = new ConsequenceChain()
            .level(1, s -> System.out.println(s + " → ⚠ 1단계: 공포와 질병"))
            .level(3, s -> System.out.println(s + " → ⚠ 2단계: 가뭄과 기근"))
            .level(5, s -> System.out.println(s + " → ⚠ 3단계: 전쟁과 포위"))
            .level(7, s -> System.out.println(s + " → ⚠ 4단계: 포로와 땅 황폐"));

        law.evaluate("이스라엘", true,  0);
        law.evaluate("이스라엘", false, 2);
        law.evaluate("이스라엘", false, 5);
        law.evaluate("이스라엘", false, 8);
    }
}

from typing import Callable

class ConsequenceChain:
    def __init__(self):
        self._levels: list[tuple[int, Callable[[str], None]]] = []

    def level(self, threshold: int, fn: Callable[[str], None]) -> "ConsequenceChain":
        self._levels.append((threshold, fn))
        self._levels.sort(key=lambda x: x[0], reverse=True)
        return self

    def evaluate(self, subject: str, obedient: bool, disobey_count: int = 0):
        if obedient:
            print(f"{subject} → ✅ 축복 / Blessed")
            return
        for threshold, fn in self._levels:
            if disobey_count >= threshold:
                fn(subject)
                return
        print(f"{subject} → 경고")


if __name__ == "__main__":
    law = (
        ConsequenceChain()
        .level(1, lambda s: print(f"{s} → ⚠ 1단계: 공포와 질병"))
        .level(3, lambda s: print(f"{s} → ⚠ 2단계: 가뭄과 기근"))
        .level(5, lambda s: print(f"{s} → ⚠ 3단계: 전쟁과 포위"))
        .level(7, lambda s: print(f"{s} → ⚠ 4단계: 포로와 땅 황폐"))
    )

    law.evaluate("이스라엘", True,  0)
    law.evaluate("이스라엘", False, 2)
    law.evaluate("이스라엘", False, 5)
    law.evaluate("이스라엘", False, 8)

Comments

Avatar
 2026년 4월 7일 20:09분

불순종 단계가 올라갈수록 전략이 바뀌는 구조가, 점점 강해지는 징계의 흐름을 코드로 생생하게 보여주네요.



Search

← 목록으로