๋ณํ ์์ ์ 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 ๊ฐ๋ฐ์๋ก ์์คํ ์ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ค๋ ์ด์ ์ ๊ฒฐ์ฝ ์คํํ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ตฌ๋ฌธ์ด ์๋๋ผ ์๋๋ฅผ ๋ฐ๊พธ์ธ์. ๊ทธ ์ฐจ์ด๊ฐ ํ๋ํ์ ํต์ฌ ๊ฐ์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.


