https://github.com/naver/fixture-monkey/pull/1036#discussion_r1739620057
register한 ArbitraryBuilder를 initialize하는 과정이 재귀적으로 일어나서 다르게 처리합니다.
register한 타입의 ArbitratyBuilder를 생성하는 것도 동일한 Fixture Monkey 인스턴스에서 일어나기 때문에 재귀루프를 종료시킬 base case를 정의해주어야 합니다.
initializeNamedArbitraryBuilderMap
를 호출할 당시에 base case가 정의가 안되서 두 번째 객체가 의도대로 생성이 안되는 것입니다.
위에 내용을 이해하시고 아래 코드를 살펴보시면 이해하실 수 있을겁니다!
재귀함수와 비슷한 경우라고 생각하시면 됩니다. 값과 값을 조합하는 객체가 두 가지 경우로 달라집니다.
앞서 말씀드렸듯이 재귀함수는 종료하는 base case
가 필요합니다. 값을 생성하는 경우(Wrapper class
)가 base case이고 값을 조합하는 경우(객체)가 그 외의 case입니다.
트리로 생각하면 리프 노드와 그 외의 노드로 나뉜다고 보셔도 될 것 같습니다.
리프 노드는 wrapper class
이고, 그 외의 노드는 자식인 노드들의 조합으로 만들어집니다.
요 개념을 이해하시면 위의 코멘트들이 어떤 의미인지 이해가 되실 것 같습니다.
SimpleObject와 같은 경우 재귀를 통해 안에 있는 필드들의 값이 생성이 됨
이때 Wrapper Class는 재귀를 통해 생성하는 것이 아니라 한 번만 실행되면 됨.
그러므로 재귀 함수를 종료하는 basecase가 필요했던 것이다.
예상하건데 match API에서 일치를 해서 생성이 되는 것이 base case가 될 것.