언제나 개발을 중지하는 일은 해결하기 힘든 버그를 마주하는 것에서 시작한다. 하지만 고심과 노력 끝에 그 버그에 대해 완전히 알아내고 정복하는 때마다, 나는 성장하는 것을 느낀다.
SchBoard 제9개발일 작성일지 작성으로부터 꽤나 오랜 시간이 흘렀다. 그동안 대학교 개강 시즌이기도 했지만, 가장 큰 이유로 해결하기 힘든, 예상치 못한 버그가 발생했기 때문에 개발에 대한 의욕을 잃어버린 때문이리라. 하지만 오늘 그 문제를 해결했다.
이전 버전의 SchBoard에서 그 버그를 구현하는 방법으로는 XOR 게이트를 만드는 것이 있다. NOT 2개와 OR 1개를 연결하여 NAND 컴포넌트를 만들고, NAND 뒤에 NOT을 붙여 AND를 만든 후에, 저장해둔 NAND 컴포넌트를 설치하고 그 위에 OR를 설치해, 각각의 출력을 기존의 AND에 연결하고 NOT-NOT 다이오드를 뒤에 각각 연결해주어 입력을 두 개로 만들어주면 XOR 게이트를 구현할 수 있다. 이때, NAND 컴포넌트를 만들면 하나의 소켓이 켜져있는 상태로 초기화된다.
이 오류가 발생하는 이유는 NAND라는 오브젝트의 구조가 실제 회로를 이루는 컴포넌트에 종속적이기 때문이다. 이 문제를 해결하기 위해서 integrated_blueprint라는 선형화 컴포넌트 아이디를 제시했지만, 추상화 컴포넌트 목록에서 컴포넌트를 꺼내와 만들 때에는 그냥 integrated 형태의 선형화 컴포넌트를 사용하기 때문이다.
처음에는 간단하게 integrated 컴포넌트가 아니라 integrated_blueprint 형태의 선형화 컴포넌트를 사용하여 구조화를 진행하면 해결될 줄 알았다. 하지만 integrated_blueprint 형태의 선형화 컴포넌트는 그 자체로 구조에 대한 정보를 가지고 있지 않기 때문에 구조에 대한 정보를 구조화 함수에 전달해줄 필요가 있었다. 이것은 preconfiguredStructure라는 변수를 만듦으로 구현할 수 있었다.
정작 integrated_blueprint로 추상화 컴포넌트를 꺼내오도록 해도 문제가 해결되지는 않았는데, 오랜 시간 해결 방법을 찾아 헤메인 결과, integrated_blueprint형 선형화 컴포넌트의 2번 인덱스——시그널을 저장하지 않고 그때그때 불러오도록 한 결과, integrated_blueprint를 사용하는 의미를 무색하게 만들었기 때문이었다. 이것을 바꿔주고 나니 쉽게 해결할 수 있었다.
다음 개발일에는 프로젝트의 저장과 불러오기를 구현해야 하겠다.