|
자, Crusader Kings 2 의 모딩에서 중요도로 따지면 둘째 가라면 서러워할 내용에 도달했습니다. 이해하고 보면 아무것도 아닌데, 흐름이 눈에 보이기 전에는 초보 모더들을 죽도록 괴롭히는 문제아들입니다. 개인적으로도, 어떻게든 쉽게 풀어서 설명하고 싶지만 늘 실패하곤 하는 내용이기도 합니다. 이번엔 성공할 수 있을지 모르겠습니다.
우선 도대체 스코프가 뭔지부터 확인을 하고 넘어가야 할 것 같습니다. 이번 페이지에서는 스코프의 개념, 그리고 기본이 되는 스코프인 ROOT 와 FROM 이 뭔지를 알아보겠습니다. 본인의 배경 지식 여부에 따라서 이 페이지의 난이도는 상당히 차이가 날 수 있으니 꼼꼼하게 읽어보시기 바랍니다. 질문은 언제나 환영합니다만, 가능한 한 구체적으로 질문을 해 주셔야 제대로 된 답변이 가능합니다.
스코프(Scope) 의 사전적인 의미는 범위, 시야 뭐 이런 뜻입니다. 일반적인 프로그래밍 언어에서의 Scope 라는 용어는 "(유효한) 범위" 정도의 의미로 쓰여요. Crusader Kings 2 모딩 스크립트에서의 스코프 역시 비슷한 의미를 갖습니다.
지난 페이지에서 말씀드린 바 있죠. 어떤 디시전이건 이벤트건, 가장 단순화시키면 결국 어떤 조건이 만족되면 어떤 효과를 발생시키겠다는 선언으로 단순화시킬 수 있다고요. 여기서 가장 기초적인 의문점과 맞닥뜨리게 됩니다. 조건이든 효과든, 항상 그 조건이나 효과의 주체와 객체를 생각하지 않을 수 없습니다. 이를테면 누구에게 어떤 트레잇이 존재하는 경우, 누가 누구(또는 무엇)에게 골드 얼마를 넘겨준다는 식으로 이벤트가 구성되지 않던가요?
이처럼, 어떤 조건이나 효과를 어떤 대상에 대해서 적용할 것인가를 정의하기 위해서 사용하는 개념이 스코프라는 개념입니다. 그런데 바로 위에서, 프로그래밍에서의 스코프의 뜻이 "(유효한) 범위" 라는 의미로 쓰인다고 말씀드렸죠. 주체나 객체를 정의하는 것과 범위라는 것이 무슨 관계가 있느냐... 스코프를 사용할 때에 구역을 설정하여 범위의 형식으로 사용하기 때문입니다. 아래 코드를 한번 보실까요?
FROM = { wealth = 10 prestige = -10 }
바로 앞 페이지에서 배웠던 걸 그대로 적용해 보죠. FROM 이라고 쓰고 뒤에 = { 를 붙여서 구역 하나를 열었고, 뭔지는 모르겠지만 두 줄이 나오고 다시 } 기호가 등장하면서 중괄호가 닫혔습니다. 이게 무슨 의미였나요? wealth 나 prestige 는 명령어이지만 아직 안 배웠으니 모르는 게 당연하고, FROM 이라는 게 뭔지 배우지 않았으니 아직은 뭔지 모르겠지만, 이미 배운 걸 가지고 판단해보면 이제부터 FROM 에 대한 이야기를 하겠다고 중괄호를 열었기 때문에, 이제 이 중괄호가 닫힐 때까지 그 중괄호 내부에 적혀 있는 이야기는 모두 FROM 에 대한 이야기가 된다는 거죠. 여기까지 따라오셨죠? 여기서 FROM 을 특정한 스코프를 나타나는 예약어*라고 하여 스코프 지시자라고 부를 겁니다. FROM 이 무슨 의미인지는 바로 뒤에서 배우도록 합시다.
* 예약어라는 건 지난 페이지에서 간단히 말씀드렸었죠. 어떤 역할이든, 그 스크립트 내에서 특정한 의미를 갖거나 역할을 갖기로 미리 정해져 있는 모든 단어나 구를 의미합니다. 명령어, 조건문, 스코프 지시자, 모디파이어 등등, 그 스크립트 내에서 미리 정해진 의미를 갖는 모든 것이 예약어의 범주에 들어갑니다. 앞으로는 예약어라는 표현을 설명 없이 쓸 것이니 여기서 최종적으로 정리해 두십시오.
차근차근 진행해 봅시다. 간단한 예를 가지고 확인을 해 보자고요. 디시전을 생각해 보죠. 지금 이 글을 보고 계신 분 중에 디시전이 뭔지 모르시는 분은 안 계실 겁니다. (다들 Crusader Kings 2를 플레이하시는 분들이잖아요?) 이왕이면 자극적인 소재를 골라볼까요. 현재 플레이어는 비잔티움 제국의 황제이고, 지금 감옥에 남자 봉신 한 명이 갇혀 있습니다. 아주아주 미운 놈이니 그걸 뽑아버리려고 외교 메뉴를 열고 디시전을 클릭했습니다. 자 여기서 스톱!
지금 일어나고 있는 일을 생각해 봅시다. 외교 메뉴에서 실행하는 디시전은, 선택한 캐릭터에 대해서 무언가를 실행하도록 동작하는 디시전입니다. (타겟 디시전이라고, 나중에 배우게 됩니다.) 그러면, 현재 이 디시전이 실행되고 있는 캐릭터는 바로 디시전의 상대방인 투옥된 봉신입니다. (간단히 생각해 보세요. 이 디시전을 실행하면 누구의 거시기가 뽑히는지.) 그리고, 봉신에 대해서 이 이벤트를 실행시킨 자는 누구죠? 네. 플레이어죠. 쉽죠?
이 경우, 이벤트를 실행한 자는 FROM 이라는 스코프 지시자를 써서 나타냅니다. 그리고 그 이벤트가 실행되는 자는 ROOT 라는 스코프 지시자를 써서 나타냅니다. ("누구"로부터(from) "누구"에게(to=root) 이벤트가 실행되었다 라고 생각해 보세요.) 이제 조금 전에 봤던 코드를 다시 한 번 보겠습니다.
FROM = { wealth = 10 prestige = -10 }
FROM 은 이 이벤트[디시전이라고 해도 됩니다]를 실행해서, ROOT 에게 이 이벤트가 실행되도록 한 자입니다. 따라서, 위 코드를 그대로 보면 이 이벤트를 실행한 자에게 무언가 효과를 주도록 하는 코드가 됩니다.
이왕 코드를 본 김에, 나머지도 간단히 알아보도록 하죠. wealth 라는 예약어는 여기서는 명령문으로 쓰였고, 현재 스코프로 지정되어 있는 캐릭터*에게 골드를 더하거나 빼는 명령문입니다. 뒤에 10이라고 적었으니, 10 골드를 더하라는 명령어인데, 이건 나중에 공부해야 합니다. 현 단계에서 설명할 수 없으니, 일단 그렇다고 알고 넘어가 주세요. prestige 라는 예약어는 마찬가지로 명령문이고, 현재 스코프로 지정되어 있는 캐릭터에게 명예 수치를 더하거나 빼는 기능을 합니다. 뒤의 값에 -10 이라고 적었으니, 10을 빼 주라는 거네요. 마찬가지로 현 단계에서 완벽하게 설명하기는 어려우니 일단 설명한 대로만 이해해 주시면 되겠습니다. 아무튼, 결론적으로 위 코드는 FROM 이 명예 10이 깎이는 대신 골드 10을 얻게 되는 코드인 겁니다.
* 현재 스코프로 지정되어 있는 캐릭터, 또는 현재 스코프의 캐릭터라는 구를 사용했는데, 이건 그 예약어가 사용된 구역의 스코프가 누구로 지정되어 있는가를 의미합니다. 위의 예는 두 명령문이 사용된 구역이 FROM = { } 이므로, 현재 스코프의 캐릭터는 FROM 을 의미하게 되는 거예요.
참고로, ROOT 는 이벤트가 실행되는 자라는 개념상 어떤 이벤트에서도 반드시 존재합니다. 즉, 어떤 이벤트가 일단 발생했다면 ROOT 스코프가 정의되지 않는 이벤트는 없습니다. 그러나, 이벤트를 실행한 자의 개념인 FROM 스코프는 정의되지 않을 수도 있습니다. 예를 들어 천재지변이라는 건 누가 일으켜서 일어난 게 아니잖아요? 비슷한 개념이 Crusader Kings 2에서도 있다는 겁니다. 이건 지금은 그렇게만 알아 두십시오. 나중에 디시전과 이벤트를 보다 보면, 이 경우에는 FROM 이 당연히 정의되지 않겠구나 하고 자연스럽게 이해하게 됩니다.
우리는 지금 스코프의 기초를 보고 있습니다. 가장 기본적인 스코프 지시자인 ROOT 와 FROM 을 보고 있죠. 지금부터 살펴보려는 것은, 이런 스코프 지시자들을 어떻게 사용하는지에 대한 것입니다.
일단, 스코프 지시자는 앞에서 예시 코드를 통해 보았던 것처럼, 하나의 구역을 열면서 이 구역이 어떤 대상에 대해서 기술하는 것인지를 밝히기 위해서 사용할 수 있습니다. 아까 봤던 예시이지만 다시 한 번 가져와 보겠습니다.
FROM = { wealth = 10 prestige = -10 }
이와 같이, 이 구역은 FROM 에 대해서 어떤 명령을 실행하려는 것이다 라고 설정을 하기 위해 스코프 지시자를 사용한다는 것입니다. 가장 기본적인 용법이고, 모든 스코프 지시자는 이와 같은 방법으로 사용할 수 있습니다.
그러나, 일부 스코프 지시자는 좀 특별한 방식으로 사용될 수도 있습니다. 어떤 구역 앞에 쓰여서 이 구역의 주체를 가리키는 형식이 아닌, 명령어나 조건문의 인수값(주어지는 값)으로 쓰여서 명령어나 조건문의 대상을 구체화하는 기능을 하기도 한다는 것입니다. 다음의 예를 보십시오.
FROM = { imprison = ROOT }
위 예에서 쓰인 imprison 은 명령어로서, 현재 스코프의 캐릭터를 감옥에 집어넣는 명령어입니다. 그런데, 감옥에 집어넣는 것은 두 개의 목적값이 필요해요. "누구를", "누구의 감옥에" 가둘 것인가가 정해져야 합니다.
그 중에서, "누구를" 가둘 것인가는 우리가 이미 배운 것으로 해결이 됩니다. 스코프 지시자를 사용해서 새로운 구역을 열면, 그 구역 안의 모든 명령어나 조건문은 그 스코프 지시자에 대해서 실행되거나 적용되는 것으로 보면 되니까요. 따라서 FROM = { } 구역 안에서 imprison(투옥) 명령어를 실행했기 때문에 FROM 을 어딘가의 감옥에 가두는 건 분명합니다.
문제는, 그럼 "누구의 감옥에" 가둘 것이냐는 거죠. 이것을 정의하기 위해서, imprison 명령어는 스코프 지시자 하나를 인수로 받고 있습니다. imprison 명령어 뒤에 ROOT 스코프 지시자를 써서, "ROOT의 감옥에" 가두라는 의미를 줄 수 있게 되는 것입니다. 즉, 위 코드는 FROM (이 가리키는 캐릭터) 을 ROOT (가 가리키는 캐릭터) 의 감옥에 가두라는 의미가 되는 거죠.
다만, 이처럼 명령문이나 조건문의 인수값으로 쓰일 수 있는 스코프 지시자는 몇 개 되지 않습니다. 이제까지 살펴본 FROM 과 ROOT, 그리고 앞으로 더 살펴볼 몇 개의 특별한 스코프 지시자들만이 명령어나 조건문의 인수값으로 사용될 수 있습니다. 그 외에는 오직 일반적 용법으로, 하나의 구역을 여는 중괄호 { 앞에 쓰여서 이 구역이 누구에 대한 구역인지를 밝히는 용법으로만 사용될 수 있습니다.
계속 진행해 봅시다. ROOT 와 FROM 은 기본 스코프 지시자로서 일단 디시전이나 이벤트가 실행되면 이 두 개의 스코프 지시자는 특정한 캐릭터*를 가리키게 됩니다. 여기서 하나 체크하고 넘어갈 게 있습니다. 논리적으로는 명확한 건데, 초심자의 입장에서는 거기까지 논리를 확장하는 게 사실 어렵기 때문에 명시적으로 다루고 넘어가야 할 것 같습니다.
* 지금까지 계속, ROOT 와 FROM 이 특정한 캐릭터를 가리킬 수 있다고 써 왔습니다만, 사실 꼭 캐릭터만 가리킬 수 있는 것은 아닙니다. 상황에 따라서 프로빈스 등을 가리킬 수도 있습니다. 일단 지금은 설명의 편의를 위해서 계속 캐릭터만을 대상으로 적어가겠습니다.
예를 들어 보죠. 디시전(늘 그렇듯 이벤트도 마찬가지)이 실행이 되면, 실행 당시의 상황에 따라서 ROOT 와 FROM 값이 정해집니다. 누가 실행한 디시전이냐에 따라서 그 실행한 캐릭터가 FROM 값에 연결되고, 현재 누구에게 실행되고 있느냐에 따라서 그 캐릭터가 ROOT 값에 연결될 겁니다. 여기까진 이미 배운 것이고 또 명료합니다. 자, 그러면 이렇게 설정된 ROOT 와 FROM 값은 언제까지 유효한 걸까요?
정답은 "그 디시전 또는 이벤트 범위 내에서 유효하다" 입니다. 따라서, 실행된 그 이벤트 내의 어느 부분에서든, FROM 과 ROOT의 값은 그 이벤트가 실행되는 순간 결정된 그 캐릭터를 계속 가리키게 되고, 이것은 그 이벤트가 실행되는 동안 그 이벤트의 범위 내에서는 절대로 바뀌지 않습니다. 모더나 플레이어가 임의로 바꿀 수도 없습니다. 반대로, 다른 이벤트가 실행되면 그 다른 이벤트 내에서는 ROOT 나 FROM 의 값이 그 새로 실행된 이벤트에 맞추어서 다시 정의가 되고, 그 이벤트 내에서는 그 값이 계속 유지가 된다는 이야기가 되는 겁니다.
조금 보충 설명을 하자면, 이건 ROOT 와 FROM 등의 스코프 지시자가 일정한 구역을 열고, 그 구역 안쪽에서 사용되는 명령어나 조건문이 그 스코프 지시자를 기준으로 해석되는 것과는 다른 문제입니다. 그렇게 쓰이는 ROOT 와 FROM 에 매칭된 특정한 캐릭터 값이 언제까지 그 캐릭터 값으로 유효하냐는 문제입니다.
무슨 이야긴지 모르시겠다면 아래의 예를 보십시오. 처음에 들었던 그 디시전의 예를 다시 가져와 봅시다. 캐릭터 A 가 비잔티움 제국의 황제이고, 캐릭터 B 는 그 남자 봉신으로 현재 캐릭터 A의 감옥에 갇혀 있습니다. 캐릭터 A 가 자신의 디시전을 실행해서 캐릭터 B 의 거시기를 뽑았습니다. (그 절차는 모두 디시전 내에서 진행이 됩니다.) 이 디시전의 실행이 끝나기 전까지는, FROM 은 캐릭터 A를, ROOT 는 캐릭터 B 를 가리키고 있게 됩니다. 이해 되시죠?
그런데, Crusader Kings 2 플레이어라면 보통은 알고 계시겠지만(전혀 모딩 경험이 없으신 분은 모르실 수도 있겠군요), 디시전은 실행되더라도 이벤트처럼 뭔가 화면에 출력하는 기능이 없습니다. 따라서 디시전 실행의 결과를 캐릭터들에게 알리기 위해서는 디시전으로부터 별도의 이벤트를 실행해야 합니다. (구체적으로 하나의 디시전이나 이벤트에서 다른 이벤트를 실행하는 방법은 한참 뒤에나 배울 내용입니다. 일단 이게 가능하다는 것만 알고 넘어가세요.) A와 B 모두에게 각각 이벤트를 하나씩 실행해야 하겠네요. 이 경우, 만약 디시전에서 A 와 B 에게 이벤트를 실행한다면, 그렇게 실행된 각 이벤트에서의 ROOT 값과 FROM 값은 디시전에서의 FROM, ROOT 값이 계속 쓰이는 것이 아니라, 각각의 이벤트에 맞춰서 다시 계산이 된다는 것입니다. 구체적으로 어떻게 되느냐. 그건 바로 다음 절에서 알아봅시다.
위의 예를 계속 이어가 보겠습니다. 거세 디시전으로부터 비잔티움 황제 A 에게 이벤트 A 가, 봉신 B 에게 이벤트 B 가 실행되었다고 하겠습니다. 이 때, 이벤트 A 와 이벤트 B 에서의 ROOT 와 FROM 값은 어떻게 변하는지 확인해 보겠습니다.
일단 이벤트 A 는 (비잔티움 황제인) 캐릭터 A 에게 실행되었습니다. 따라서, 이벤트 A 의 ROOT 값은 고민할 필요 없이 캐릭터 A 가 됩니다. 이벤트 B 는 봉신인 B에게 실행되었으므로 마찬가지로 고민할 필요가 없이 이벤트 B 의 ROOT 값은 캐릭터 B 와 연결됩니다. 여기까진 쉽죠?
문제는 이벤트 A 와 이벤트 B 의 FROM 값이 어떤 캐릭터와 연결되느냐는 겁니다. 여기서 한 가지 법칙이 등장하는데요. 그것은 이벤트가 연결되는 경우(디시전으로부터 이벤트가 실행되는 경우도 연결입니다) - 보통 이렇게 이벤트 여러 개가 연결되는 것을 전체로서 이벤트 체인이라고 하는데 - 그 연결된 이벤트의 FROM 값은 바로 직전 이벤트나 디시전의 ROOT 값이 된다는 것입니다. 이 경우에 대입하면, 디시전에서의 ROOT 값은 캐릭터 B 였기 때문에, 이 디시전에서 실행한 이벤트 A, B 모두 FROM 값은 캐릭터 B 가 된다는 것입니다. (디시전이나 이벤트로부터 다른 이벤트가 실행되는 경우, 그 디시전이나 이벤트가 현재 실행되고 있는 캐릭터(ROOT)가 다른 이벤트들을 실행하는 것이나 마찬가지라는 이유에서 이렇게 처리되는 것입니다. )
여러 개의 이벤트가 이어져 나가는 이벤트 체인의 경우는 조금 복잡한 이벤트 모딩을 하는 경우에 흔히 겪게 되는 경우이며, 이 경우 개별적인 각각의 이벤트마다 FROM/ROOT 가 누구를 가리키는지 알아볼 수 있어야 모딩에 지장이 없습니다. 따라서 이 내용은 반드시 이해하고 넘어갈 수 있도록 합시다. 이해되지 않으시면 (가능하면 구체적으로) 질문을 해 주세요. 워낙 중요한 내용이고, 독자분들이 어떤 부분을 어려워하는지를 제가 파악하면 좀 더 쉽게 다시 설명할 수 있을지도 모릅니다.
그런데, 앞의 예에서 이벤트 B 가 문제가 됩니다. 이벤트 A 의 경우, FROM 값은 캐릭터 B, ROOT 값은 캐릭터 A 이기 때문에 이벤트 A 에서 필요에 따라 캐릭터 A, B 모두에게 조건 또는 효과를 줄 수 있습니다. 만약 캐릭터 A 에게 효과를 주고 싶다면 ROOT 스코프 지시자를 이용해서 구역을 열고 그 내부에 명령어를 입력하면 될 거고, 캐릭터 B 에게 효과를 주고 싶다면 FROM 스코프 지시자를 이용해서 구역을 열고 그 내부에 명령어를 입력하면 될 거예요. 그런데, 이벤트 B의 경우, FROM 값도 캐릭터 B, ROOT 값도 캐릭터 B 입니다. 그렇다면 이벤트 B 에서 A에 대한 조건이나 효과를 설정할 방법은 없다는 이야기가 되거든요. (물론 둘 사이의 관계가 주군-봉신 관계이기 때문에 이를 이용해서 캐릭터 A의 스코프를 잡는* 것은 별론으로 하고요.)
* 제가 종종 특정한 캐릭터 등의 스코프를 잡는다거나 스코프를 연다고 표현하는 경우는 그 스코프 지시자를 사용해서 새로운 구역을 만든다는 의미로 받아들이시면 됩니다.
이런 경우에 대비해서, FROM 스코프의 경우 이어쓰기를 허용하고 있습니다. 무슨 이야기냐 하면, 이벤트가 계속 이어지는 경우에, 바로 직전 이벤트에서의 FROM 을 나타내기 위해서 FROMFROM 이라고 쓸 수 있다는 겁니다.
따라서, 이벤트 B 의 경우에도 황제인 캐릭터 A 에게 어떤 효과를 주기 위해서 스코프를 열어야 한다면 FROMFROM 이라는 스코프 지시자를 쓸 수 있다는 이야기죠. 이런 FROM 의 이어쓰기는 4회까지(2.2.x 버전까지는 3회) 가능합니다. FROMFROMFROMFROM 까지 가능하다는 이야기죠!
스코프에 있어서 가장 기본이 되는 이야기인 스코프의 기본적인 개념과 특성, 그리고 가장 기본이 되는 스코프인 FROM 과 ROOT에 대한 이야기를 마쳤습니다. 이제 다음 페이지로 넘어가도록 합시다. 스코프에 관한 내용은 상당히 난해한 내용이 많지만, 스코프를 이해해야 모딩을 제대로 할 수 있고, 또 스코프를 잘 이해하면 이후의 여정이 굉장히 쉬워집니다. 내용에 대한 질문은 언제든지 환영합니다.
(최종 업데이트: 2017. 03. 05, 대응 버전: 2.6.3)
첫댓글 좋은 글이라 덧붙이자면, 스코프는 간단하게 보면 이겁니다. 누군가를 지칭하는 것. 이게 스코프의 시작이자 끝이고 전부이자 모든 것입니다. 스코프는 그냥 누군가를 지칭하는 것입니다. 뭐를 어떤 방식으로 지칭하느냐에 따라 스코프의 종류가 갈리는거고요.
'★ ROOT, FROM의 유효 범위' 이 부분 부터 그 뒤의 내용 전체의 경우는
'다른 이벤트가 실행된다','이벤트의 연결'에 대한 내용을 알아야 독자가 그 부분의 내용을 이해할 수 있습니다.
그러니 이벤트, 이벤트 체인에 대한 설명이 끝난 뒤에야 해당 내용을 설명하는 게 좋을 것 같고요.
독자가 이해할 수 없는 부분이 있다고 해도 무시하면 그만이니 이 내용을 여기 놔둬도 문제는 안 되지만,
tacitus님이 '내가 이렇게 썼으니 이거 읽는 사람들은 모두 이벤트 체인, FROM의 이어쓰기에 대한 지식을 잘 알고 있겠지?'라고 생각하고 나중에 이 부분의 지식을 필요로 하는 내용이 나올 때 설명을 부실하게 해버리면 모딩 초보가 좀 힘들 수도..
이벤트의 연결에 관한 주 내용들은 나중에 이벤트 파트의 중간쯤에 가야 배울 내용입니다. 그 전에는 명령문 정리할 때 미리 한번 정도 더 보게 될 내용이고요. 그럼 왜 이 내용을 미리 설명하는가... ROOT, FROM 의 유효 범위가 하나의 이벤트 단위라는 점을 모르는 상태에서는 Crusader Kings 2 엔진이 ROOT, FROM 스코프를 어떻게 할당하는지를 전혀 이해할 수 없습니다. 게다가, 이걸 분명히 하지 않은 상태로 바로 다음다음다음 페이지에서 나올 PREV 스코프 지시자를 보게 되면 이게 대체 FROM 하고 무슨 차이가 있는지를 (초보 시절의 저처럼) 고민하게 돼요. 그렇기 때문에, 제가 중간에 말을 넣었듯이, 일단 "이벤트나 디시전으로부터
다른 이벤트를 실행할 수 있다" 는 정도만 알고 다음 설명을 읽어달라는 이야기를 하는 겁니다. 그걸 일단 알고 나면 나머지 내용은 쭉 연결되는 내용이지 않습니까? 설명하기도 이해하기도 편한 거죠. 지난 페이지의 덧글에도 달았지만, 뒤의 내용을 끌어다가 설명을 할 때는 절대 그 이상을 원하지 않습니다. 나중에 자세히 설명을 드리겠지만 일단 이건 이렇다고 알고 따라와 주시면 그 부분의 설명이 끝났을 때 자연스럽게 알게 될 겁니다. 이게 마치 직소 퍼즐 맞추는 거하고 똑같아요. 부분만 놓고 보면 어려운데, 나중에 전체를 다 알고 나면 따로 설명할 필요조차 없는 내용 말이죠. 그렇다고 그 부분을 설명 안 해버리면 그것과 연결되
는 다른 파트를 설명할 수가 없게 돼요.
독자가 이해할 수 없는 부분이 있다면 무시하면 안 됩니다. 그럼 그 글이 무슨 의미가 있겠어요. 저도 이전 페이지까지 독자들이 달성했을 수준이 어디까지일지 계산해 보면서 한 번에 단계가 너무 높아지지 않도록 이래저래 고민하면서 쓰는 중입니다. 당연히, 제가 설명드리지 않은 부분도 다 알 것이라고 생각하지도 않아요. 다만 제가 놓치는 부분이 분명히 있을 수 있습니다. 제 문체가 만연체이다 보니 핵심이 잘 안 보일 수도 있고, 초보시절이 하도 오래 전의 일이라 제 감각이 과거와 다를 수도 있습니다. 그러면 그 부분을 찍어서 질문해 주시면 됩니다. 그럼 다시 설명해 드릴 거고요.
그리고 아직 초보인 상태에서는 굳이
'자, 그러면 이렇게 설정된 ROOT 와 FROM 값은 언제까지 유효한 걸까요? 정답은 "그 디시전 또는 이벤트 범위 내에서 유효하다" 입니다. ' 이 말 역시도 '이벤트의 연결'에 대해 알아야 이해할 수 있는 부분이니, 이렇게 설명할 필요 없이,
'하나의 디시전 또는 이벤트에서 처음 ROOT와 FROM이 결정되면 그 디시전/이벤트가 끝날 때까지 ROOT/FROM이 가리키는 대상은 변하지 않습니다'라고 설명하고 넘기면 충분할 것 같고요.
제가 길게 썼지만 핵심을 정확하게 이해하고 계시네요. 그 부분은 그렇게 알고 계시면 됩니다. 별 의도 없이 주의 환기 목적으로 질문을 던져본 부분인데, 그게 이해를 방해한다면 다음에 평문으로 수정하도록 하겠습니다.