COBOL-to-Java ๋ณ€ํ™˜๊ธฐ๋Š” "Jobol"์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

COBOL์„ Java๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ "Jobol"์ด๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์™€ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ณ€ํ™˜ ์ž‘์—…์€ 3๊ฐœ์›” ๋งŒ์— ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ปดํŒŒ์ผ๋˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์—ฌ ๋ฐฐํฌ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 6๊ฐœ์›” ํ›„, ํ”Œ๋žซํผ ํŒ€์€ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” ํŒ€์› ์ค‘ ๋ˆ„๊ตฌ๋„ ์ฝ”๋“œ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ” ๋ฆฌ๋ทฐ๋ณด๋‹ค ๋‘ ๋ฐฐ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์—๋Š” ๋ฉ”์ธํ”„๋ ˆ์ž„ ๊ฒฝํ—˜์ด ์—†๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ๋…๋“ค, ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—… ์ €์žฅ์†Œ(WORKING-STORAGE), ํ”„๋กœ์‹œ์ € ๋‚˜๋ˆ—์…ˆ ๋…ผ๋ฆฌ, ํŒฉํ˜• ์‹ญ์ง„์ˆ˜ ํ•„๋“œ ๊ทœ์น™ ๋“ฑ์ด ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ COBOL์—์„œ ์ž๋ฐ”๋กœ ๋ณ€ํ™˜๋˜์—ˆ์ง€๋งŒ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฐ” ์ฝ”๋“œ๋Š” ์‚ฌ๊ณ ๋ฐฉ์‹, ๊ตฌ์กฐ, ๋™์ž‘ ๋ฐฉ์‹ ๋ชจ๋‘ COBOL๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ Jobol ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

Jobol(๋•Œ๋•Œ๋กœ JOBOL๋กœ ํ‘œ๊ธฐ)์€ COBOL์˜ ์ ˆ์ฐจ์  ์˜๋ฏธ๋ก ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ Java์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์ง€ ์•Š๋Š” Java ์ฝ”๋“œ์˜ ํ•ฉ์„ฑ์–ด์ž…๋‹ˆ๋‹ค. ๋ถ„์„ ํšŒ์‚ฌ Intellyx์˜ ์„ค๋ฆฝ์ž์ธ Jason Bloomberg๋Š” Jobol์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง์ ‘ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. "Jobol์€ ์›๋ž˜ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  COBOL์˜ ์˜๋ฏธ๋ก ์„ ๋ณด์กดํ•˜๋Š” ๊ธฐ์ˆ ์ ์œผ๋กœ ์œ ํšจํ•œ Java ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” Java ์ฝ”๋“œ๋ฅผ ๋งˆ์น˜ COBOL์ฒ˜๋Ÿผ ๋‹ค๋ค„์•ผ ํ•ฉ๋‹ˆ๋‹ค." ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒฐ๊ณผ๋Š” ๋ฐ”๋กœ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. COBOL์„ Jobol๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ธฐ์—…์€ COBOL ์ „๋ฌธ ์ง€์‹์˜ ํ•„์š”์„ฑ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹จ์ง€ ๊ทธ ์ „๋ฌธ ์ง€์‹์˜ ํ•„์š”์„ฑ์„ ์ฝ”๋“œ์— ํฌํ•จ๋œ COBOL ํŒจํ„ด์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์–ธ์–ด๋กœ ์˜ฎ๊ธด ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์›๋ž˜ COBOL๋ณด๋‹ค ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์–ด๋ ต๊ณ  Java๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ด์ ๋„ ์ „ํ˜€ ๋ˆ„๋ฆด ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ์„ค๊ณ„ ์ „์˜ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„

SMART TS XL ๋ชจ๋“  PERFORM ๋ฐ CALL ์ข…์†์„ฑ์„ ๋งคํ•‘ํ•˜์—ฌ Java ์„œ๋น„์Šค ๊ณ„์ธต์ด COBOL ํด๋ž˜์Šค ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ๊ฒฐํ•ฉ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”โ€ฆ

์ฐจ๋ก€

Jobol์˜ ์‹ค์ œ ๋ชจ์Šต์€ ์–ด๋–จ๊นŒ์š”?

์›์ธ์„ ์ง„๋‹จํ•˜๊ธฐ ์ „์— ๋จผ์ € ํŒจํ„ด์„ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋™์ผํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ธ ๊ณ ๊ฐ ์‹ ์šฉ ์กฐํšŒ๋ฅผ ์„ธ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›๋ž˜ COBOL ์ฝ”๋“œ, ์ž๋™ ๋ณ€ํ™˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” Jobol ์ฝ”๋“œ, ๊ทธ๋ฆฌ๊ณ  ์ˆ™๋ จ๋œ ํ˜„๋Œ€ํ™” ์ž‘์—…์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ด€์šฉ์ ์ธ Java ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์›๋ž˜์˜ COBOL:

์ฝ”๋ณผ

       PERFORM-CREDIT-CHECK.
           MOVE WS-CUST-ID TO DB-CUST-KEY
           READ CUSTOMER-FILE KEY IS DB-CUST-KEY
               INVALID KEY
                   MOVE 'NOT FOUND' TO WS-STATUS
                   PERFORM HANDLE-MISSING-CUSTOMER
           END-READ

           IF CUST-CREDIT-SCORE < 650
               MOVE 'DECLINED' TO WS-CREDIT-RESULT
               MOVE 'Score below threshold' TO WS-DECLINE-REASON
           ELSE IF CUST-OUTSTANDING-BALANCE > CUST-CREDIT-LIMIT
               MOVE 'DECLINED' TO WS-CREDIT-RESULT
               MOVE 'Balance exceeds limit' TO WS-DECLINE-REASON
           ELSE
               MOVE 'APPROVED' TO WS-CREDIT-RESULT
           END-IF.

์ค„ ๋‹จ์œ„ ๋ณ€ํ™˜๊ธฐ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ Jobol:

์ž๋ฐ”

// Jobol: procedural COBOL logic mapped directly to Java
// No OOP, no encapsulation, static global state, COBOL naming conventions
public class CreditCheckProgram {
    static String WS_CUST_ID;
    static String DB_CUST_KEY;
    static String WS_STATUS;
    static String WS_CREDIT_RESULT;
    static String WS_DECLINE_REASON;
    static int CUST_CREDIT_SCORE;
    static double CUST_OUTSTANDING_BALANCE;
    static double CUST_CREDIT_LIMIT;

    public static void PERFORM_CREDIT_CHECK() {
        DB_CUST_KEY = WS_CUST_ID;
        Customer customer = CustomerFile.read(DB_CUST_KEY);
        if (customer == null) {
            WS_STATUS = "NOT FOUND";
            HANDLE_MISSING_CUSTOMER();
            return;
        }
        CUST_CREDIT_SCORE = customer.getCreditScore();
        CUST_OUTSTANDING_BALANCE = customer.getOutstandingBalance();
        CUST_CREDIT_LIMIT = customer.getCreditLimit();

        if (CUST_CREDIT_SCORE < 650) {
            WS_CREDIT_RESULT = "DECLINED";
            WS_DECLINE_REASON = "Score below threshold";
        } else if (CUST_OUTSTANDING_BALANCE > CUST_CREDIT_LIMIT) {
            WS_CREDIT_RESULT = "DECLINED";
            WS_DECLINE_REASON = "Balance exceeds limit";
        } else {
            WS_CREDIT_RESULT = "APPROVED";
        }
    }
}

์ˆ™๋ จ๋œ ํ˜„๋Œ€ํ™” ์ž‘์—…์ด ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ด€์šฉ์ ์ธ ์ž๋ฐ”:

์ž๋ฐ”

// Idiomatic Java: domain model, encapsulation, value objects, Spring service
@Service
public class CreditCheckService {

    private final CustomerRepository customerRepository;

    public CreditCheckService(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    public CreditDecision check(CustomerId customerId) {
        Customer customer = customerRepository.findById(customerId)
            .orElseThrow(() -> new CustomerNotFoundException(customerId));

        if (customer.creditScore() < CreditThresholds.MINIMUM_SCORE) {
            return CreditDecision.declined("Score below threshold");
        }
        if (customer.outstandingBalance().compareTo(customer.creditLimit()) > 0) {
            return CreditDecision.declined("Balance exceeds limit");
        }
        return CreditDecision.approved();
    }
}

Jobol ๋ฒ„์ „์€ 32์ค„์˜ ์ •์  ์ „์—ญ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ ˆ์ฐจ์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , COBOL์‹ ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉฐ, ์ „์—ญ ํด๋ž˜์Šค ์ƒํƒœ๋ฅผ ๋จผ์ € ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๊ด€์šฉ์ ์ธ ๋ฒ„์ „์€ 20์ค„๋กœ ๊ฐ„๊ฒฐํ•˜๊ณ , ์ฃผ์ž… ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ , COBOL ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์—†๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋ผ๋„ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒ„์ „ ๋ชจ๋‘ ๋™์ผํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ํ˜„๋Œ€ํ™”์˜ ๋ชฉํ‘œ์˜€๋˜ ํŒ€์ด ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋Š” ๋‹จ ํ•˜๋‚˜๋ฟ์ž…๋‹ˆ๋‹ค.

Jobol์˜ 6๊ฐ€์ง€ ํŒจํ„ด๊ณผ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋Ÿฌํ•œ ํŒจํ„ด์„ ์ƒ์„ฑํ•˜๋Š” ์ด์œ 

ํŒจํ„ด 1: ์ž‘์—… ์ €์žฅ์†Œ๋ฅผ ์ „์—ญ ์ •์  ์ƒํƒœ๋กœ ๋Œ€์ฒด

COBOL์˜ ์ž‘์—… ์ €์žฅ์†Œ(WORKING-STORAGE) ์„น์…˜์€ PERFORM ํ˜ธ์ถœ ๊ฐ„์— ์œ ์ง€๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๊ฐ€๋ณ€ ์ƒํƒœ์ด๋ฉฐ, ๋ชจ๋“  ๋‹จ๋ฝ์—์„œ ๋™์ผํ•œ ์ž‘์—… ์ €์žฅ์†Œ ๋ณ€์ˆ˜๋ฅผ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค. ์ž๋™ ๋ณ€ํ™˜ ๋„๊ตฌ๋Š” ์ด๋ฅผ ๋‹จ์ผ ํด๋ž˜์Šค์˜ Java ์ •์  ํ•„๋“œ๋กœ ์ง์ ‘ ๋งคํ•‘ํ•˜์—ฌ ๊ณต์œ  ์ƒํƒœ์˜ ์˜๋ฏธ๋ก ์„ ์œ ์ง€ํ•˜๋ฉด์„œ Java์˜ ๋ชจ๋“  ์บก์Аํ™” ์›์น™์„ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ : ์ž‘์—… ์ €์žฅ์†Œ(WORKING-STORAGE)๋ฅผ ์ •์  ํ•„๋“œ๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๊ณ„์ ์ธ ์ผ๋Œ€์ผ ๋ณ€ํ™˜์ž…๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๋Š” ์ž๋ฐ”์˜ ์บก์Аํ™” ๋ชจ๋ธ์ด ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€์˜ ๊ณต์œ  ์ƒํƒœ๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๋Š” ์›๋ž˜ ๊ตฌ์กฐ๊ฐ€ ์กด์žฌํ–ˆ๋˜ ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜์ง€ ์•Š๊ณ  ๋ณด์ด๋Š” ๊ทธ๋Œ€๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ •์  ์ƒํƒœ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†๊ณ , ๋ช…์‹œ์ ์ธ ๋™๊ธฐํ™” ์—†์ด๋Š” ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์ด ํ™•๋ณด๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ตฌ์กฐ์ ์œผ๋กœ ๊ธฐ์กด COBOL ์ฝ”๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์— ๋™์‹œ์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋จผ์ € ์ •์  ์ƒํƒœ๋ฅผ ํ’€์–ด๋‚ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ์ž‘์—…์€ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ๋ถ€ํ„ฐ ์ดํ›„์˜ ๋ชจ๋“  ์œ ์ง€๋ณด์ˆ˜ ๋‹ด๋‹น์ž์—๊ฒŒ ๋ฏธ๋ค„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ž‘์—… ์ €์žฅ์†Œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ ๋ฒ”์œ„์— ๋”ฐ๋ผ ์ธ์Šคํ„ด์Šค ํ•„๋“œ, ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋‹จ๋ฝ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ๋ฝ ๊ฐ„์— ์ „๋‹ฌ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์‹ค์ œ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋Š” ์ ์ ˆํ•˜๊ฒŒ ์บก์Аํ™”๋œ ๋„๋ฉ”์ธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ํ•„๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํŒจํ„ด 2: ๊ธด ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ๋˜๋Š” ์ฒด์ธ ์‹คํ–‰

COBOL ํ”„๋กœ๊ทธ๋žจ์€ PERFORM ์ฒด์ธ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋ฉ”์ธ ํ”„๋กœ์‹œ์ €๋Š” ๋ช…๋ช…๋œ ๋‹จ๋ฝ๋“ค์˜ ์‹œํ€€์Šค๋ฅผ PERFORMํ•˜๊ณ , ๊ฐ ๋‹จ๋ฝ์€ ๋‹ค๋ฅธ ๋‹จ๋ฝ์„ PERFORMํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ๋ณ€ํ™˜๊ธฐ๋Š” ๊ฐ ๋‹จ๋ฝ์„ ์ •์  ๋ฉ”์„œ๋“œ๋กœ, ๊ฐ PERFORM์„ ์ •์  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, COBOL์˜ PERFORM ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜๋Š” ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ์„œ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ๋‹จ์ผ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”

// Jobol: PERFORM chain mapped to static method calls
public class ProcessOrderProgram {
    public static void main() {
        validateOrder();
        checkInventory();
        calculateTotal();
        applyDiscounts();
        processPayment();
        generateConfirmation();
        updateInventory();
    }

    public static void validateOrder() { /* ... */ }
    public static void checkInventory() { /* ... */ }
    // ... 40 more static methods
}

๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ : COBOL ๋ฌธ๋‹จ๊ณผ Java ๋ฉ”์„œ๋“œ ๊ฐ„์˜ ๊ตฌ์กฐ์  ๋งคํ•‘์€ ์ง์ ‘์ ์ž…๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๋Š” PERFORM์ด "์ด ์ฝ”๋“œ ๋‹จ์œ„๋ฅผ ํ˜ธ์ถœํ•˜๋ผ"๋Š” ์˜๋ฏธ์ž„์„ ์ •ํ™•ํ•˜๊ฒŒ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ๊ฐ„๊ณผํ•˜๋Š” ๊ฒƒ์€ Java์˜ ๊ฐ์ฒด ๋ชจ๋ธ์ด ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๊ฐ€ ์•„๋‹Œ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ : PERFORM ํ”„๋กœ์„ธ์Šค์— ํฌํ•จ๋œ ๋„๋ฉ”์ธ ๊ฐœ๋…์„ ํŒŒ์•…ํ•˜์‹ญ์‹œ์˜ค. validateOrder, calculateTotal์˜ˆ์‚ฐ ๋ฐ applyDiscounts ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. processPayment ์ด๋Š” ๊ฒฐ์ œ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. checkInventory updateInventory ์ด๋Š” ์ธ๋ฒคํ† ๋ฆฌ ๊ด€๋ จ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ •์  ๋ฉ”์„œ๋“œ๋“ค์ด ํ•ด๋‹น ๋„๋ฉ”์ธ ํด๋ž˜์Šค๋กœ ๋ถ„์‚ฐ๋˜์–ด, ๊ธด ์ ˆ์ฐจ์  ํ˜ธ์ถœ ์ฒด์ธ์ด ์ ์ ˆํ•œ ๋„๋ฉ”์ธ ๊ฐ์ฒด์— ์œ„์ž„ํ•˜๋Š” ๊ฐ„๊ฒฐํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐฉ์‹์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

ํŒจํ„ด 3: ์ •๋ฐ€๋„ ์ฒ˜๋ฆฌ๊ฐ€ ์—†๋Š” ์ˆซ์ž ์œ ํ˜•

COBOL์˜ ํŒฉํ˜• ์‹ญ์ง„์ˆ˜(COMP-3) ํ•„๋“œ๋Š” ์ •ํ™•ํ•œ ์‹ญ์ง„์ˆ˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. COMP-3๋ฅผ Java๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ณ€ํ™˜๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. double or float ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ๊ธˆ์œต ๊ฑฐ๋ž˜์— ๊ฑธ์ณ ๋ˆ„์ ๋˜๋Š” ์ฒด๊ณ„์ ์ธ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐ˜์˜ฌ๋ฆผ ์˜ค๋ฅ˜๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”

// Jobol: COMP-3 mapped to double (wrong)
static double WS_TRANSACTION_AMOUNT;  // Was PIC S9(9)V99 COMP-3
static double WS_RUNNING_TOTAL;

// After 10M additions of 0.1:
// Expected: 1,000,000.00
// Actual:   1,000,000.0000000002 (floating point accumulation)

์ž๋ฐ”

// Idiomatic Java: COMP-3 mapped to BigDecimal (correct)
private BigDecimal transactionAmount;  // Preserves decimal precision
private BigDecimal runningTotal;

// After 10M additions of 0.1:
// Result: exactly 1,000,000.00

๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ : double `__init__`์€ Java์˜ ๊ธฐ๋ณธ ์ˆซ์ž ์œ ํ˜•์ž…๋‹ˆ๋‹ค. COMP-3 ์‹œ๋งจํ‹ฑ์Šค๋ฅผ ํŠน๋ณ„ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ณ€ํ™˜๊ธฐ๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ Java ์ˆซ์ž ์œ ํ˜•์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ์ •ํ™•ํ•œ ์†Œ์ˆ˜ ์—ฐ์‚ฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ : ๋ชจ๋“  COMP-3 ํ•„๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. BigDecimalCOMP-3 ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ˆ˜์น˜ ๊ณ„์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. BigDecimal ์‚ฐ์ˆ˜. scale() ์˜ BigDecimal PIC ์ ˆ์— ์•”์‹œ๋œ ์†Œ์ˆ˜์  ์ž๋ฆฌ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. PIC S9(9)V99 ์•”์‹œ์ ์ธ ์†Œ์ˆ˜์  ๋‘ ์ž๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. BigDecimal ์ถ•์ฒ™ 2๋กœ.

ํŒจํ„ด 4: EBCDIC ๋ฌธ์ž์—ด ๋ฐ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ์ž”ํ•ด

COBOL์€ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ EBCDIC ์ธ์ฝ”๋”ฉ์˜ ๊ณ ์ • ๊ธธ์ด ๊ณต๋ฐฑ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๋Š” ์ข…์ข… UTF-8๋กœ ๋ณ€ํ™˜ํ•œ ํ›„์—๋„ ๊ณ ์ • ๊ธธ์ด ๊ณต๋ฐฑ ๋ฌธ์ž์—ด์˜ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•˜๋Š” Java ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด Java ์ฝ”๋“œ๊ฐ€ ๋งˆ์น˜ 1970๋…„๋Œ€ ๋ฉ”์ธํ”„๋ ˆ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋จธ์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”

// Jobol: preserves COBOL fixed-length string handling
static char[] WS_CUSTOMER_NAME = new char[40]; // Was PIC X(40)
static char[] WS_CUSTOMER_ADDR = new char[80]; // Was PIC X(80)

// COBOL-style space-padding comparison
if (new String(WS_CUSTOMER_NAME).trim().equals("SMITH")) { ... }

// COBOL-style string concatenation with padding
System.arraycopy(name.toCharArray(), 0, WS_CUSTOMER_NAME, 0,
                 Math.min(name.length(), 40));

์ž๋ฐ”

// Idiomatic Java: proper String types and domain objects
private String customerName;  // Trim on read, no padding
private String customerAddress;

// Clean comparison
if ("Smith".equalsIgnoreCase(customer.name())) { ... }

๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ : COBOL PIC X(40) ์ •์˜์—๋Š” ๋ณ€ํ™˜๊ธฐ๊ฐ€ Java ๋ฐฐ์—ด ํฌ๊ธฐ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ธธ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. EBCDIC-UTF-8 ๋ณ€ํ™˜์€ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ณ ์ • ๊ธธ์ด ์˜๋ฏธ๋ก ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ : ์ง€๋„ PIC X(n) ํ•„๋“œ์— String ๊ฐ์ฒด์˜ ์ฝ๊ธฐ ์‹œ ๊ธธ์ด๋ฅผ ์ค„์ด๊ณ  ๊ณ ์ • ๊ธธ์ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ธธ์ด ์ œ์•ฝ ์กฐ๊ฑด์ด ์ค‘์š”ํ•œ ์œ ์ผํ•œ ์ปจํ…์ŠคํŠธ๋Š” ์˜์†์„ฑ ๊ฒฝ๊ณ„(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ด ๊ธธ์ด, ํŒŒ์ผ ํ˜•์‹ ์œ„์น˜)์ด๋ฉฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ์—์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒจํ„ด 5: ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

COBOL์€ FILE STATUS, SQLCODE, RETURN-CODE์™€ ๊ฐ™์€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๋Š” ์ด ํŒจํ„ด์„ Java์—์„œ๋„ ์œ ์ง€ํ•˜์—ฌ Java์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋ชจ๋“  ์ž‘์—… ํ›„์— ์ •์ˆ˜ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”

// Jobol: COBOL status code pattern in Java
static int WS_FILE_STATUS;
static int WS_SQL_CODE;

CustomerFile.read(DB_CUST_KEY);
WS_FILE_STATUS = CustomerFile.getLastStatus();
if (WS_FILE_STATUS == 10) {
    // Not found
} else if (WS_FILE_STATUS == 35) {
    // File not available
} else if (WS_FILE_STATUS != 0) {
    // Unknown error
}

์ž๋ฐ”

// Idiomatic Java: exceptions for error conditions
try {
    Customer customer = customerRepository.findById(customerId)
        .orElseThrow(() -> new CustomerNotFoundException(customerId));
    // process customer
} catch (DatabaseUnavailableException e) {
    log.error("Database unavailable during credit check", e);
    throw new CreditCheckServiceException("Service temporarily unavailable", e);
}

๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ : ์ƒํƒœ ์ฝ”๋“œ ๊ฒ€์‚ฌ๋Š” COBOL ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ƒํƒœ ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๋Š” Java ๋ฉ”์„œ๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๊ณ„์ ์ธ ๋ณ€ํ™˜์ž…๋‹ˆ๋‹ค. Java ์˜ˆ์™ธ๊ฐ€ ๊ด€์šฉ์ ์ธ ํ‘œํ˜„ ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฒƒ์„ ์ธ์‹ํ•˜๋Š” ๋ฐ์—๋Š” ๊ธฐ๊ณ„์ ์ธ ๋ณ€ํ™˜์ด ์•„๋‹Œ ์•„ํ‚คํ…์ฒ˜์ ์ธ ํŒ๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ : COBOL ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ Java ์˜ˆ์™ธ๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ƒํƒœ 10(๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. Optional.empty() ๋˜๋Š” ๋„๋ฉ”์ธ๋ณ„ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. SQLCODE ์˜ค๋ฅ˜๋Š” ์œ ํ˜•์ด ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. Java ์ฝ”๋“œ ๊ตฌ์กฐ๋Š” ์˜๋„๋ฅผ ๋ฐ˜์˜ํ•˜๋ฉฐ, ์˜ˆ์ƒ๋˜๋Š” ์˜ค๋ฅ˜ ๋ชจ๋“œ์—๋Š” try/catch๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜์—๋Š” ๊ฒ€์‚ฌ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ„ด 6: ๋‹จ์ผํ™”๋œ ๊ณ„๊ธ‰ ๊ตฌ์กฐ

COBOL ํ”„๋กœ๊ทธ๋žจ์€ ์„ค๊ณ„์ƒ ๋‹จ์ผ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „์ฒด ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ๋Š” COBOL ํ”„๋กœ๊ทธ๋žจ ํ•˜๋‚˜๋‹น ํ•˜๋‚˜์˜ Java ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ์ƒ์„ฑ๋˜๋Š” Java ํด๋ž˜์Šค๋Š” ์ˆ˜์ฒœ ์ค„์— ๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๋ผ๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠนํ™”๋œ ํด๋ž˜์Šค์— ๋ถ„์‚ฐ์‹œ์ผฐ์„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ฑ…์ž„์„ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์ด์œ : ํ•˜๋‚˜์˜ COBOL ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜๋‚˜์˜ Java ํด๋ž˜์Šค์— ๋งคํ•‘๋˜๋ฉฐ, ๋ณ€ํ™˜๊ธฐ์˜ ๋ณ€ํ™˜ ๋‹จ์œ„๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ(๋‹จ๋ฝ, ์„น์…˜, PERFORM ์ฒด์ธ)๋Š” ๋” ์ž‘์€ ํด๋ž˜์Šค๋กœ ๋ถ„ํ•ด๋˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…: ๋ณ€ํ™˜๋œ ๊ฐ ํด๋ž˜์Šค์— ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฝ๊ธฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ์ ์šฉ, ์ถœ๋ ฅ ํ˜•์‹ ์ง€์ • ๋ฐ ํŒŒ์ผ ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” 3,000์ค„์งœ๋ฆฌ Jobol ํด๋ž˜์Šค๋Š” ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ, ์ €์žฅ์†Œ, ๋„๋ฉ”์ธ ์„œ๋น„์Šค, ํฌ๋งทํ„ฐ ๋ฐ ์“ฐ๊ธฐ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ํด๋ž˜์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ  ํ•˜๋‚˜์˜ ์ฑ…์ž„์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ ๋ถ„์„ ํ•„์ˆ˜ ์š”๊ฑด

๋ชจ๋“  Jobol ํŒจํ„ด์—๋Š” ์ƒ์‘ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌํŒฉํ† ๋ง์€ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์ง์ ‘ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์ดํ•ดํ•œ ํ›„์—์•ผ ์žฌ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ์ดํ•ด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋ณ€ํ™˜ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์†Œ์Šค COBOL ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ตฌ์กฐ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ, ๊ตฌ์กฐ ๋ถ„์„์€ ์ „ํ™˜ ๊ฒฐ์ •์— ํ•„์š”ํ•œ ์ž…๋ ฅ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก. ๊ฐ ํ”„๋กœ๊ทธ๋žจ์˜ EVALUATE ์กฐ๊ฑด, IF ๋ถ„๊ธฐ, COMPUTE ์ˆ˜์‹์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์—ด๊ฑฐ, ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๋ฟ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋žจ์ด ๋‚ด๋ฆฌ๋Š” ๊ฒฐ์ •๊นŒ์ง€ ๋ชจ๋‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชฉ๋ก์€ ๋ฆฌํŒฉํ† ๋ง๋œ Java ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๋ช…์„ธ์ž…๋‹ˆ๋‹ค. 847๊ฐœ์˜ EVALUATE ์กฐ๊ฑด์„ ๊ฐ€์ง„ ํ”„๋กœ๊ทธ๋žจ์€ 847๊ฐœ์˜ ๊ฒฐ์ • ์ง€์ ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์ƒ ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ธฐ์˜ ์ถœ๋ ฅ์€ ์‹œ์ž‘ ๋‹จ๊ณ„์˜ ์ดˆ์•ˆ์ผ ๋ฟ, ์ตœ์ข… ์ œํ’ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋Š” ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ COBOL ํ”„๋กœ๊ทธ๋žจ์— ๊ฑธ์ณ ์žˆ๋Š” PERFORM ์ฒด์ธ์€ Java์—์„œ๋Š” ์„œ๋น„์Šค ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•  ์ˆ˜ ์žˆ๋Š”์ง€(์ธ๋ฐ”์šด๋“œ ์˜์กด์„ฑ์ด ์ ์€ ๊ฒฝ์šฐ) ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์€ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•˜๋Š”์ง€(์นดํ”ผ๋ถ์ด๋‚˜ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๊ณต์œ ๋˜๋Š” ์˜์กด์„ฑ์ด ๋งŽ์€ ๊ฒฝ์šฐ)๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ๋“œ ์ฝ”๋“œ ์‹๋ณ„. ์‹ค์ œ ์‹คํ–‰ ๊ฒฝ๋กœ์—์„œ ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋‹จ๋ฝ์ด๋‚˜ ์„น์…˜์€ ๋ฐ๋“œ ์ฝ”๋“œ๋กœ ๊ฐ„์ฃผํ•˜๋ฉฐ, ๋ณ€ํ™˜๋œ Java ์ฝ”๋“œ์— ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ๋“œ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ€ํ™˜๊ธฐ๋Š” ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์ดํ›„์˜ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…๋Ÿ‰์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ณต๊ตฌ. VSAM ํ•จ์ˆ˜ ๋„๋ฉ”์ธ(FD) ํ•ญ๋ชฉ, DB2 ํ…Œ์ด๋ธ” ์ •์˜ ๋ฐ ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์นดํ”ผ๋ถ ๊ตฌ์กฐ. ๊ฐ COBOL ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ Java ๋„๋ฉ”์ธ ๊ฐ์ฒด์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. ์ด ๋งคํ•‘์€ WORKING-STORAGE์˜ ํ•„๋“œ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๋ถ„์„ ์ž…๋ ฅ์ „ํ™˜ ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค
์ง€์  ์ˆ˜๋ฅผ ํ‰๊ฐ€/ํ™•์ธ๋„๋ฉ”์ธ ํด๋ž˜์Šค ๋ถ„ํ•ด, ๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฐ์ • ์‚ฌ๋ก€ ์ˆ˜
์ธ๋ฐ”์šด๋“œ ์ข…์†์„ฑ ๊ฐœ์ˆ˜๋ฆฌํŒฉํ† ๋ง ์ˆœ์„œ: ์˜์กด์„ฑ์ด ๊ฐ€์žฅ ์ ์€ ํ”„๋กœ๊ทธ๋žจ๋ถ€ํ„ฐ ๋จผ์ € ์ง„ํ–‰
๋ฐ๋“œ ์ฝ”๋“œ ๋น„์œจ๋ฒ”์œ„ ์ถ•์†Œ, ๋ณ€ํ™˜์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ ์ œ์™ธ
COMP-3 ํ•„๋“œBigDecimal ๋ชจ๋“  ์ˆซ์ž ํ•„๋“œ์— ๋Œ€ํ•œ ๋งคํ•‘
PIC X ํ•„๋“œ ๊ธธ์ด๋ฌธ์ž์—ด ์œ ํ˜• ๋งคํ•‘ ๋ฐ ์˜์†์„ฑ ๊ณ„์ธต ์ œ์•ฝ ์กฐ๊ฑด
๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ ์ˆ˜ํ–‰์„œ๋น„์Šค ๊ณ„์ธต ๋ถ„ํ•ด, PERFORM ์ฒด์ธ์€ ๋„๋ฉ”์ธ ์„œ๋น„์Šค ํ˜ธ์ถœ์ด ๋ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ ์ƒํƒœ ์‚ฌ์šฉ์˜ˆ์™ธ ๋ชจ๋ธ ์„ค๊ณ„, ์ฆ‰ ์–ด๋–ค ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์˜ˆ์™ธ ์œ ํ˜•์— ๋งคํ•‘๋˜๋Š”์ง€

๊ทธ ๋Œ€์‹  ์ „ํ™˜์ด ๊ฐ€์ ธ์™€์•ผ ํ•  ๊ฒฐ๊ณผ

Jobol์˜ ๋Œ€์•ˆ์€ COBOL์„ ํ…œํ”Œ๋ฆฟ์ด ์•„๋‹Œ ๋ช…์„ธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. COBOL ํ”„๋กœ๊ทธ๋žจ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ, Java ํ”„๋กœ๊ทธ๋žจ์€ ํ•ด๋‹น ๋กœ์ง์„ Java์˜ ๊ด€์šฉ๊ตฌ๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€ํ™˜ ์›๋ฆฌ: ๊ตฌ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์˜๋„๋ฅผ ๋ฐ”๊พธ์„ธ์š”. COBOL IF CUST-CREDIT-SCORE < 650 MOVE 'DECLINED' TO WS-CREDIT-RESULT "์‹ ์šฉ์ ์ˆ˜๊ฐ€ 650์  ๋ฏธ๋งŒ์ธ ๊ณ ๊ฐ์˜ ์ฃผ๋ฌธ์€ ๊ฑฐ์ ˆ๋ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” ์ฝ”๋“œ๋„ ์ž๋ฐ” ์–ธ์–ด๋กœ ๋™์ผํ•œ ๋‚ด์šฉ์„ ํ‘œํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. if (customer.creditScore() < CreditThresholds.MINIMUM_SCORE) return CreditDecision.declined(...). ์•„๋‹ˆ if (CUST_CREDIT_SCORE < 650) { WS_CREDIT_RESULT = "DECLINED"; }.

๊ด€์šฉ์ ์ธ Java ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹ค์šฉ์ ์ธ ๋ณ€ํ™˜ ์›Œํฌํ”Œ๋กœ:

1๋‹จ๊ณ„: COBOL ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ตฌ์กฐ ๋ถ„์„, ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„ ๋ถ„์„, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก ์ž‘์„ฑ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ณต๊ตฌ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์‹๋ณ„์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ๋ช…์„ธ์„œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€๋Š” ์–ด๋–ค ์ฝ”๋“œ๋„ ๋ณ€ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: ๋„๋ฉ”์ธ ๋ชจ๋ธ ์„ค๊ณ„. COBOL ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ(๊ณ ๊ฐ, ๊ณ„์ •, ๊ฑฐ๋ž˜, ์ •์ฑ…)๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—”ํ‹ฐํ‹ฐ๋Š” Java ๋„๋ฉ”์ธ ํด๋ž˜์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž‘์—… ์ €์žฅ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ํ•„๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

3๋‹จ๊ณ„: ์„œ๋น„์Šค ๊ณ„์ธต ์„ค๊ณ„. COBOL ๋‹จ๋ฝ ๋ฐ ์„น์…˜์ด ๊ตฌํ˜„ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์ž‘์—…(์‹ ์šฉ ์กฐํšŒ, ๊ฒฐ์ œ ์ฒ˜๋ฆฌ, ์ž”์•ก ๊ณ„์‚ฐ)์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ํ•ด๋‹น ๋„๋ฉ”์ธ ์„œ๋น„์Šค ํด๋ž˜์Šค์˜ Java ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ๋ฝ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” PERFORM ์ฒด์ธ์€ ์„œ๋น„์Šค์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋กœ์ง์ด ๋ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: ์ž๋™ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ์•ˆ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 2๋‹จ๊ณ„์™€ 3๋‹จ๊ณ„์—์„œ ์„ค๊ณ„ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ Java ์ดˆ์•ˆ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ดˆ์•ˆ์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ชจ๋“  ์˜์‚ฌ ๊ฒฐ์ • ๋ถ„๊ธฐ๊ฐ€ ํ‘œํ˜„๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

5 ๋‹จ๊ณ„ : Jobol ํŒจํ„ด์— ๋Œ€ํ•œ ์ฒด๊ณ„์ ์ธ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค์Œ 6๊ฐ€์ง€ ์•ˆํ‹ฐ ํŒจํ„ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •์  ์ƒํƒœ๋ฅผ ์ธ์Šคํ„ด์Šค ์ƒํƒœ๋กœ ๋Œ€์ฒด, ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๋„๋ฉ”์ธ ํด๋ž˜์Šค๋กœ ๋ถ„์‚ฐ, ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์˜ˆ์™ธ๋กœ ๋Œ€์ฒด, double ๊ณผ BigDecimal๊ณ ์ • ๊ธธ์ด ๋ฐฐ์—ด์„ ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. String๋‹จ์ผํ™”๋œ ํด๋ž˜์Šค๋ฅผ ๋‹จ์ผ ์ฑ…์ž„ ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค.

6๋‹จ๊ณ„: ๋™์ž‘ ๋™๋“ฑ์„ฑ ํ…Œ์ŠคํŠธ. COBOL ๋ถ„์„์—์„œ ์ƒ์„ฑ๋œ ํŠน์„ฑํ™” ํ…Œ์ŠคํŠธ ์ฝ”ํผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง๋œ Java ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  EVALUATE ์กฐ๊ฑด๊ณผ IF ๋ถ„๊ธฐ์—๋Š” ํ•ด๋‹น ์กฐ๊ฑด์„ ์‹คํ–‰ํ•˜๊ณ  COBOL ์ถœ๋ ฅ๊ณผ์˜ ๋™๋“ฑ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• SMART TS XL Jobol์„ ์›์ฒœ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Jobol ์˜ˆ๋ฐฉ์„ ์œ„ํ•œ ๊ตฌ์กฐ ๋ถ„์„์˜ ํ•„์ˆ˜ ์กฐ๊ฑด์€ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก, ๋ฐ๋“œ ์ฝ”๋“œ ์‹๋ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ณต๊ตฌ์ž…๋‹ˆ๋‹ค. SMART TS XL๋ณ€ํ™˜ ๋„๊ตฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— COBOL ์†Œ์Šค์— ๋Œ€ํ•œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

SMART TS XL์˜ ์ •์  ์ฝ”๋“œ ๋ถ„์„ COBOL ์†Œ์Šค ์ฝ”๋“œ์— ์žˆ๋Š” ๋ชจ๋“  EVALUATE ์กฐ๊ฑด, ๋ชจ๋“  IF ๋ถ„๊ธฐ, ๋ชจ๋“  COMPUTE ์ˆ˜์‹, ๋ชจ๋“  PERFORM ๊ด€๊ณ„๋ฅผ ์—ด๊ฑฐํ•˜์—ฌ, ๋ฆฌํŒฉํ† ๋ง๋œ Java ์ฝ”๋“œ๊ฐ€ ์ถฉ์‹คํžˆ ์žฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ „์ฒด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜ ๋„๊ตฌ๊ฐ€ Jobol์„ ์ƒ์„ฑํ•  ๋•Œ, ์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก์€ ๋ฆฌํŒฉํ† ๋ง์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์— ์žˆ๋Š” ๋ชจ๋“  ์กฐ๊ฑด์€ Java ์ฝ”๋“œ์˜ ํ•ด๋‹น ๋„๋ฉ”์ธ ํด๋ž˜์Šค์— Java ๊ด€์šฉ๊ตฌ๋กœ ํ‘œํ˜„๋˜์–ด ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜์กด์„ฑ ๋งคํ•‘์€ Java ์„œ๋น„์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” PERFORM ๊ทธ๋ž˜ํ”„์™€ ํ”„๋กœ๊ทธ๋žจ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ์ž์ฃผ ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋™์ผํ•œ ๊ฒฝ๊ณ„ ์ปจํ…์ŠคํŠธ์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ Java ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ชจ๋“  ์†Œ๋น„์ž๋ฅผ ์ง€์›ํ•˜๋„๋ก ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š” ๊ณต์œ  ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋Š” ์„œ๋น„์Šค ๊ณ„์ธต ์„ค๊ณ„ ๋‹จ๊ณ„์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, COBOL์˜ ์•”๋ฌต์ ์ธ ๊ฒฐํ•ฉ ๊ตฌ์กฐ๋ฅผ Java์˜ ๋ช…์‹œ์ ์ธ ์˜์กด์„ฑ ์ฃผ์ž… ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ํ˜„๋Œ€ํ™” ๋ถ„์„์„ ํ†ตํ•ด ํ”„๋กœ๋•์…˜ ์‹คํ–‰ ๊ฒฝ๋กœ์—์„œ ์ „ํ˜€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ, ๋‹จ๋ฝ ๋ฐ ์„น์…˜์„ ์‹๋ณ„ํ•˜๊ณ , ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ๋ณ€ํ™˜ ๋ฒ”์œ„์—์„œ ์™„์ „ํžˆ ์ œ์™ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” COBOL ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” Jobol ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ Jobol ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฒƒ์€ ๋ณ€ํ™˜ ์‹œ์ž‘ ์ „์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋ ฅ์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ํ–ฅ ๋ถ„์„ ๊ธฐ๋Šฅ์€ ๋ฆฌํŒฉํ† ๋ง ์ˆœ์„œ์˜ ํƒ€๋‹น์„ฑ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. COBOL ํ”„๋กœ๊ทธ๋žจ์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ Jobol์—์„œ ๊ด€์šฉ์ ์ธ Java ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋ง๋˜๋Š” ๋™์•ˆ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ, ์˜ํ–ฅ ๋ถ„์„์€ ๋ณ€๊ฒฝ๋œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Java ์ฝ”๋“œ์—์„œ๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ˆœ์„œ(๊ฐ€์ž…์„ฑ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ํ”„๋กœ๊ทธ๋žจ๋ถ€ํ„ฐ)๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉด ๊ฐ ๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•œ ์กฐ์ • ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€ํ™˜๊ธฐ๋Š” ๊ตฌ๋ฌธ์„ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ํ˜„๋Œ€ํ™”๋Š” ์˜๋ฏธ๋ฅผ ๋ณ€ํ™”์‹œํ‚ต๋‹ˆ๋‹ค.

COBOL์„ Java๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฌ๋žŒ์ด ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์˜๋ฏธ์  ๋™๋“ฑ์„ฑ๋ณด๋‹ค๋Š” ๋Œ€์ƒ ์–ธ์–ด์˜ ๊ด€์šฉ๊ตฌ์—์„œ ๊ตฌ๋ฌธ์  ๋Œ€์‘์„ ์ถ”๊ตฌํ•˜๋Š” ๋‹ค๋ฅธ ๋ชฉํ‘œ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Jobol์€ ์†Œ์Šค ์–ธ์–ด(COBOL)์™€ ๋Œ€์ƒ ์–ธ์–ด(Java)์˜ ๊ตฌ์กฐ์  ๋ชจ๋ธ์ด ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅผ ๋•Œ ๊ตฌ๋ฌธ์  ๋Œ€์‘์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค.

Jobol์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์กฐ์ง์€ ๋” ๋‚˜์€ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ๋ณ€ํ™˜๊ธฐ๋ฅผ ์™„์„ฑ๋œ ์ œํ’ˆ์ด ์•„๋‹Œ ์ดˆ์•ˆ ์ƒ์„ฑ๊ธฐ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ๋ณ€ํ™˜ ์‹œ์ž‘ ์ „์— ๊ตฌ์กฐ์  ๋ถ„์„์— ํˆฌ์žํ•˜๊ณ , ๋ณ€ํ™˜๊ธฐ ์‹คํ–‰ ์ „์— Java ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ชฉ๋ก์„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์•„ ๋ณ€ํ™˜๊ธฐ ์ถœ๋ ฅ๋ฌผ์— ์ฒด๊ณ„์ ์ธ ๋ฆฌํŒฉํ† ๋ง์„ ์ ์šฉํ•˜๋Š” ์กฐ์ง์ž…๋‹ˆ๋‹ค.

Jobol ์‚ฌ์šฉ์€ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Jobol ์‚ฌ์šฉ์„ ํ”ผํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ์€ ๋ชจ๋“  ๋ณ€ํ™˜ ์ž‘์—…์— ์•ž์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ ๋ถ„์„ ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง ์ž‘์—…์ž…๋‹ˆ๋‹ค. Jobol ์‚ฌ์šฉ์„ ํ”ผํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์œ ์ง€ ๊ด€๋ฆฌ์— COBOL ์ „๋ฌธ ์ง€์‹์ด ํ•„์š”ํ•œ Java ์‹œ์Šคํ…œ์ด ๋˜๋ฏ€๋กœ, ํ˜„๋Œ€ํ™”์˜ ๊ธฐ๋Œ€ ์ด์ ์ธ Java ๊ฐœ๋ฐœ์ž๋กœ ์‹œ์Šคํ…œ์„ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์ ์„ ๊ฒฐ์ฝ” ์‹คํ˜„ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์˜๋„๋ฅผ ๋ฐ”๊พธ์„ธ์š”. ๊ทธ ์ฐจ์ด๊ฐ€ ํ˜„๋Œ€ํ™”์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.