저번 시간까지는 함수, 변수, 레퍼런스가 모두 들어간 도표를 사용했어.

하지만 이제 UMesh가 완벽한 대칭 연결(연결되는 두 대상이 같은 지위로 서로에게 접근할 수 있음)을 지원하고, 완벽하게 자동으로 Null처리를 해주기 때문에 - 즉 UMesh가 두 오브젝트간의 연결을 능동적으로 관리하게 때문에 더이상 서로가 무엇을 가지고 있는지 신경쓸 필요가 없어졌어.

그래서 앞으로의 도표는 이전처럼 요소 중심이 아닌 기능 중심으로 간소화하여 만들어질 거야.


먼저 새 도표를 이용해서 개선된 UMesh에 대해 설명할께.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a3502c5876028d3c108928d4ef4a


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a35029087702df6f1cd8ab44e475


개선된 UMesh는 채널에 따라 외부 연결 시나리오와 연결 해제 시나리오를 가져.

외부 연결 시나리오는 "밖에서 이 채널로 누가 연결을 시도하면 이렇게 하세요"를 정해둔 거고, 연결 해제 시나리오는 "이 채널에 있는 얘를 연결 해제할 때 이렇게 하세요"를 정해둔 거야.

예를 들어 위 GLinear의 'node_0'채널의 경우, 밖에서 '_node_0' 이라는 녀석이 연결을 시도하면 this.node_0에 _node_0을 저장하는 작업을 수행하고, 반대로 이 채널의 연결을 끊으면 this.node_0 참조를 null로 만들어.

이렇게 하면 변수 할당과 null처리를 일일히 신경쓰지 않아도 자동으로 해 주니까 코딩에 더 집중할 수 있지.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a3502e5b73048e6846da816d4bd7


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a3502c0e23568f3c13df86f8c066


개선된 UMesh의 장점은 바로 대칭 연결이야. 좀더 구체적으로 말하자만, 연결하는 두 객체가 같은 지위로 연결되기 때문에 서로가 서로에 대한 정보를 가져올 수 있을 뿐만 아니라 두 객체 중 어느 쪽에서든 연결을 해제할 수 있어.

예를 들어 A에서 B를 연결하는 것과 B에서 A를 연결하는 것이 같은 작용을 , A에서 B를 해제하는 것과 B에서 A를 해제하는 것이 같은 작용을 해.

이로서 연결 절차에 대해 보다 자유로울 수 있고, 객체 해제 시 null처리를 신경쓰지 않을 수 있어.


그럼 실제로 연결할 때 어떻게 대칭 연결이 이루어지는지 설명할께.

아래 코드의 Connect부분이 들어온 node_0 인자를 아까 만든 채널 node_0에 연결하는 역할을 하는 부분이야.

보다시피 채널을 만들 때 시나리오를 이미 정해두었기 때문에, 인자를 연결할 내 채널과, 나를 연결할 타겟의 채널을 입력하기만 하면 연결이 끝나.

이렇게 하면 내 채널의 연결 시나리오가 실행되고, 상대도 나에 대한 채널의 시나리오가 실행돼.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a35028082254dd3c41d88c72de08


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a350275e7200d539118243d6d66b

연결 해제도 연결할 때의 방식과 똑같이 진행돼.

조금 다른 점이 있다면 상대의 채널을 입력하지 않아도 된다는 건데, 이는 이미 연결할 때 상대방의 어느 채널에 연결할지 결정했으므로 그 데이터를 그대로 사용하면 되기에 굳이 입력할 필요가 없는 거야.



이렇게 개선된 UMesh의 관계 관리에 대해 알아봤어.

아래부터는 개선된 도표를 이용해서 GNode, GFunc, GMesh의 관계를 설명할께.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a3507d0a7352df6a1d8e1dcd02d8


각 세 요소의 관계 지도야.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a350285e7654de6a108f82ab1238


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbb81c517b32a38401b5cab70f26bbb218a06192fca2f8b6


GNode를 수정할 때, GFunc와 GMesh가 바뀌는 과정이야.




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbfc4e00785aa88603f04c12b38f59a3502b5d7058dc6e428bf20f9b1f


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc84ae382701a40f0cd0fbcbb81c517b32a38401b5cab75222b8b118f267c9fca2f8b6


GMesh가 삭제될 때, 하위 계층은 자동으로 삭제돼.



오늘은 이렇게 요소 중심이 아니라 기능 중심으로 프로그램을 설명해 봤는데, 이전보다 전달하고자 하는 것들을 보다 쉽게 전달할 수 있게 된 것 같아. 

다음 시간에는 베지어 커브와 GMesh의 셰이더에 대해 설명할께. 안녕!