6. 함수와 변수 재사용하기(Base Context)
Base Context는 약속 코드의 실행 결과를 저장하고 재사용할 수 있는 기능입니다. 이를 활용하면 함수와 변수를 다른 소스 코드와 공유하고 재사용할 수 있습니다. 구체적으로 다음과 같이 활용할 수 있습니다:
- 내장 함수: 자주 사용하는 함수(약속과 번역)를 미리 구현해두고 필요할 때 런타임에 삽입하기
- REPL(Read-Eval-Print Loop): Python IDLE와 같은 대화형 콘솔 구현하기
- 유틸리티 라이브러리: 자주 사용하는 함수들을 모아서 라이브러리처럼 사용하기
Base Context 기능은 YaksokSession
의 setBaseContext
메서드를 사용하여 설정합니다.
사용법
ts
import { YaksokSession } from '@dalbit-yaksok/core'
const session = new YaksokSession();
// baseCode는 재사용할 함수와 변수가 담긴 소스코드입니다.
const baseCode = `
약속, 힘든 부탁 하기
"그건 제가 도와드릴 수 없어요" 보여주기
`
// setBaseContext를 사용하여 기본 컨텍스트를 설정합니다.
await session.setBaseContext(baseCode);
// 이제 다른 모듈에서 baseCode에 정의된 함수를 사용할 수 있습니다.
session.addModule('main', `힘든 부탁 하기`);
await session.runModule('main'); // 출력: "그건 제가 도와드릴 수 없어요"
주의 사항: 스코프는 재사용됩니다
ts
import { YaksokSession } from '@dalbit-yaksok/core'
const session = new YaksokSession();
const baseCode = `
카운터 = 1
약속, 힘든 부탁 하기
"그건 제가 도와드릴 수 없어요" 보여주기
카운터 = 카운터 + 1
`;
await session.setBaseContext(baseCode);
// 동일한 세션에서 여러 번 실행하면 컨텍스트가 공유됩니다.
await session.runModule('main'); // 카운터가 2로 증가
await session.runModule('main'); // 카운터가 3으로 증가
session.addModule('checker', `"당신이 힘든 부탁을 한 횟수: " + 카운터 보여주기`);
await session.runModule('checker'); // 출력: "당신이 힘든 부탁을 한 횟수: 3"
WARNING
주의: 동일한 YaksokSession
인스턴스 내에서 setBaseContext
로 설정된 컨텍스트는 모든 모듈 실행에 걸쳐 공유됩니다. 위 예제에서 카운터
변수는 runModule
이 호출될 때마다 증가하여 최종적으로 3
이 됩니다.
이러한 상태 유지는 의도적으로 활용할 수도 있지만, 예상치 못한 결과를 초래할 수도 있습니다. 상태를 초기화하고 싶다면 매번 새로운 YaksokSession
인스턴스를 생성하여 사용하세요.