Skip to content

6. 함수와 변수 재사용하기(Base Context)

Base Context는 약속 코드의 실행 결과를 저장하고 재사용할 수 있는 기능입니다. 이를 활용하면 함수와 변수를 다른 소스 코드와 공유하고 재사용할 수 있습니다. 구체적으로 다음과 같이 활용할 수 있습니다:

  1. 내장 함수: 자주 사용하는 함수(약속과 번역)를 미리 구현해두고 필요할 때 런타임에 삽입하기
  2. REPL(Read-Eval-Print Loop): Python IDLE와 같은 대화형 콘솔 구현하기
  3. 유틸리티 라이브러리: 자주 사용하는 함수들을 모아서 라이브러리처럼 사용하기

Base Context 기능은 YaksokSessionsetBaseContext 메서드를 사용하여 설정합니다.

사용법

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 인스턴스를 생성하여 사용하세요.