두 개의 개별 개체가 서로에 대한 참조를 전달하면 순환 참조가 발생합니다.
이전 브라우저에서는 순환 참조가 메모리 누수의 원인이었습니다. 이제 주기 및 순환 종속성을 잘 처리할 수 있는 가비지 수집 알고리즘이 개선되어 더 이상 문제가 되지 않습니다.
그러나 순수한 디자인 관점에서 순환 참조는 여전히 나쁜 것이고 코드 냄새가 납니다. 순환 참조는 서로를 참조하는 2개의 객체가 밀접하게 결합되어 있으며 한 객체에 대한 변경 사항이 다른 객체에도 변경이 필요할 수 있음을 의미합니다.
순환 참조 피하기
JS에서 순환 참조를 피할 수 있는 방법은 없습니다. 사용 사례와 상황에 따라 다르며 경우에 따라 필요할 수도 있습니다. 이를 이해하기 위해 예를 들 수 있습니다.
Dog와 Person이라는 2개의 객체가 있다고 가정합니다. 개 개체를 사용하여 개의 소유자를 참조하고 사람 개체를 사용하여 사람의 애완 동물을 참조할 수 있기를 원합니다.
let dog = new Dog(); let person = new Person(); // Creating a circular reference dog.owner = person person.pet = dog
대부분의 시나리오에서 하나의 개체에만 액세스하고 다른 개체를 파생해야 합니다. 링크 중 하나를 끊을 수 있습니다. 그렇지 않은 경우 지도를 사용하여 반대 시나리오에서 객체를 매핑할 수 있습니다. 그러나 핵을 사용하는 대신 순환 참조를 거기에 두는 것이 좋습니다.