1-4
숲 건너편의 발걸음 소리가 멀어졌다. 타닥, 타닥. 점점 작아지더니 멈췄다. 방향을 틀어 어딘가로 사라진 모양이었다.
유성은 물가에 주저앉았다. 등이 축축했다. 식은땀이 셔츠를 적셨다. 심장이 아직도 빠르게 뛰었다.
'사람? 짐승?'
하지만 지금은 그것보다 불덩이 실험이 더 중요했다. 방금 전 패널에 떴던 로그가 머릿속을 맴돌았다.
조건문. if (mana >= 10)
빌드 로그의 마나 사용량은 12였다. 그렇다면 'mana'는 대체 뭘 가리키는 걸까?
'9면? 실행이 안 되나? 아니면 폭주?'
개발자라면 누구나 아는 사실이 있다. 조건문은 분기점이다. 조건이 참이면 A 동작, 거짓이면 B 동작. 그런데 이 종이는 코드를 물리 현상으로 그대로 구현했다.
그렇다면 이건 특수효과가 아니다. 실제로 작동하는 프로그래밍 인터페이스다.
양피지를 꺼내 다시 펼쳤다. 불덩이는 위험하니까. 눈에 들어온 건 바람 함수였다.
if (mana >= 5) {
Vento.gust();
} else {
return "insufficient_mana";
}
마나 요구치가 5였다. 불덩이의 절반이었다. 비교적 안전할 것 같았다. 그리고 무엇보다 이 코드에는 else 구문이 있었다.
'드디어 예외 처리.'
이전 불덩이 코드는 예외 처리가 없어서 폭주했다. 하지만 이번에는 조건 불만족 시 문자열만 반환하고 끝날 것이었다.
'변수 값을 바꿔볼까.'
문제는 어떻게 바꾸느냐였다. 종이에 인쇄된 숫자를 손톱으로 긁었다. 문양은 미동도 하지 않았다. 잉크가 번지지도, 지워지지도 않았다.
그런데 빌드 과정에서 마나 사용량이 실시간으로 표시됐었다. 그렇다면 빌드 전에 변수를 재정의할 수 있지 않을까? 함수 호출할 때 매개변수를 넘기듯이.
양피지 코드 문장에 손을 얹었다.
"빌드 파라미터: mana = 3."
숫자 '5'가 미세하게 흔들렸다. 붉은빛이 돌더니 빌드 로그가 떴다.
[Parameter Override: mana = 3] — 매개변수 재정의: mana = 3
[Build Start] — 빌드 시작
[Parsing Code…] — 코드 분석 중...
[Syntax Check: OK] — 문법 검사: 정상
[Dependency Check: None] — 종속성 검사: 없음
[Mana Available: 3] — 사용 가능한 마나: 3
[Condition Check: mana >= 5 → FALSE] — 조건 검사: mana >= 5 → 거짓
'오, 거짓 분기.'
빌드 로그가 실행 준비 완료 대신 else 구문의 결과를 표시했다.
[Return: "insufficient_mana"] — 반환: "insufficient_mana"
바람도, 빛의 원도, 아무 현상도 일어나지 않았다. 문자열만 반환하고 끝이었다.
손가락이 저절로 공중에 구조도를 그렸다. if, else, return. 완벽한 분기 구조였다.
"진짜 그대로 작동하네."
이건 정말로 프로그래밍 언어였다. 물리 현상을 직접 제어하는 언어. 어떻게 가능한지는 모르지만 작동 원리는 이해할 수 있었다.
다음은 조건을 만족시킬 차례였다.
"빌드 파라미터: mana = 6."
[Parameter Override: mana = 6] — 매개변수 재정의: mana = 6
[Build Start] — 빌드 시작
[Parsing Code…] — 코드 분석 중...
[Syntax Check: OK] — 문법 검사: 정상
[Mana Available: 6] — 사용 가능한 마나: 6
[Condition Check: mana >= 5 → TRUE] — 조건 검사: mana >= 5 → 참
[Ready to Run] — 실행 준비 완료
"런."
발밑의 빛의 원이 옅은 바람 소리를 냈다. 중앙에서 투명한 기류가 회오리처럼 일어났다. 풀잎과 물 표면이 동시에 흔들렸다. 시원한 바람이 얼굴을 스쳤다.
부드럽고 자연스러운 바람이었다. 불덩이와 달리 위험하지 않았다. 제어도 안정적이었다.
"와."
Hello World를 처음 출력했을 때처럼 입꼬리가 저절로 올라갔다. 하지만 동시에 이 상황의 심각성도 느껴졌다. 이런 기술이 존재한다는 건 이 세계가 완전히 다르다는 뜻이었다.
'그럼 변수 값만 바꾸면 바람 세기도?'
코드를 더 자세히 살폈다. 아래에 작게 적힌 변수 선언이 보였다.
gust(strength=1)
기본값이 1이었다. 지금까지는 1로 실행됐던 것이다. 이 값을 바꾸면 바람 강도가 달라질 것이다.
"빌드 파라미터: mana = 8, strength = 3."
[Parameter Override: mana = 8, strength = 3] — 매개변수 재정의: mana = 8, strength = 3
[Build Start] — 빌드 시작
[Syntax Check: OK] — 문법 검사: 정상
[Condition Check: mana >= 5 → TRUE] — 조건 검사: mana >= 5 → 참
[Ready to Run] — 실행 준비 완료
"런."
기류가 훨씬 강했다. 물방울이 튀었다. 가까운 나뭇잎이 날아가 멀리 떨어졌다. 균형을 잃을 정도로 바람이 몰아쳤다. 개울 표면이 파도치며 물이 사방으로 튀었다.
"우와!"
뒤로 물러나 바람이 멈추길 기다렸다. 확실히 strength 값에 따라 효과 강도가 달라졌다.
손가락이 다시 공중에 구조도를 그렸다. mana: 실행 가능 여부. strength: 효과 강도. 조건 불만족 시 문자열만 반환.
'매개변수 기반 함수네.'
다음은 다중 조건이었다. 불 속성 코드 중 하나를 찾았다.
if (mana >= 10 && weather != "rain") {
Ignis.orb();
}
조건이 두 개였다. 마나가 10 이상, 동시에 날씨가 비가 아니어야 했다. 논리 연산자 &&까지 제대로 작동하는 것 같았다.
'날씨까지? 환경 변수도 감지한다고?'
빌드 파라미터에 weather = "rain"을 넣어봤다.
"빌드 파라미터: mana = 12, weather = rain."
[Parameter Override: mana = 12, weather = "rain"] — 매개변수 재정의: mana = 12, weather = "rain"
[Condition Check: mana >= 10 && weather != "rain" → FALSE] — 조건 검사: mana >= 10 && weather != "rain" → 거짓
[Return: null] — 반환: null
실행은 일어나지 않았다. 마나 조건은 만족했지만 날씨 조건이 맞지 않아 전체 조건이 거짓이 되었다.
'환경 변수까지.'
"빌드 파라미터: mana = 12, weather = clear."
[Parameter Override: mana = 12, weather = "clear"] — 매개변수 재정의: mana = 12, weather = "clear"
[Condition Check: mana >= 10 && weather != "rain" → TRUE] — 조건 검사: mana >= 10 && weather != "rain" → 참
[Ready to Run] — 실행 준비 완료
실행 준비가 완료됐다. 하지만 불덩이는 위험했다. 방금 폭주를 겪은 지 얼마 안 됐으니. 실행을 멈췄다.
명확했다. 이 종이의 모든 코드는 변수와 조건문 기반이었다. 마나, 날씨, 방향, 강도, 횟수. 심지어 실행 환경까지 코드로 통제할 수 있었다.
'이걸 내가 다룰 수 있다면.'
마나 소모를 줄이고 조건을 세밀하게 걸어 위험을 차단하고 변수값을 동적으로 조정하면 이 이상한 현상들을 누구보다 안전하고 효율적으로 사용할 수 있을 것이었다.
멀리서 바람에 흩날리는 나뭇잎이 햇빛을 반사했다. 눈동자가 미세하게 움직였다.
복잡한 시스템을 분석하고 최적화하고 더 나은 코드로 만드는 것. 그게 자신이 가장 잘하는 일이었다.
양피지를 조심스레 접어 넣었다.
"좋아."
아직 여기가 어디인지, 왜 이런 일이 가능한지는 아직 모른다. 하지만 하나는 확실했다. 이 코드들을 이해하고 최적화할 수 있다면 이 이상한 상황에서도 살아남을 수 있을 것 같았다.
[계속]
네이버 웹소설 - http://novel.naver.com/best/detail?novelId=1195007&volumeNo=4
문피아 - https://novel.munpia.com/500060/neSrl/7371943