반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

순환 참조 본문

개발

순환 참조

5_hyun 2025. 1. 14. 23:39
반응형

리액트 개발을 하던 도중 많은 데이터를 처리할 일이 생겼는데, 프로젝트의 성능이 많이 느려졌었다.

다시 빠르게 동작 시키기 위해서 여러 방법을 찾았는데, 순환 참조가 그중에서 하나였다.

여태까지 이런 문제가 있다는 것 자체를 몰랐기에 글로 적어 기록하려고 한다.

순환 참조란?

순환 참조(Circular Dependency)는 두 개 이상의 모듈이 서로를 직접적 또는 간접적으로 import 하는 상황을 말한다.

function createCircularReference() {
  const objA = {};
  const objB = {};
  objA.reference = objB;
  objB.reference = objA;
}

이렇게 서로가 서로를 참조하면 문제가 발생한다.

 

-문제점

 

  • 코드가 예상대로 동작하지 않을 수 있음
  • 초기화 순서 문제 발생 가능
  • 번들 크기 증가
  • 성능 저하
  • 컴포넌트 테스트의 어려움

내가 저지른 실수 예시

-Header.tsx

import OperationLevel from './OperationLevel';

const Header = () => {
  return (
    <StyledAppBar>
      <MainTitle />
      <OperationLevel />
      <FieldTime />
    </StyledAppBar>
  );
};

export default Header;

export const dictionary = {
...
};

 

 

-OperationLevel.tsx

import { dictionary } from './Header';

const OperationLevel = memo(() => {
  return (
    <OperationLevelWrapper>
      <CurrentStatus
        status={dictionary[defcon]}
      />
    </OperationLevelWrapper>
  );
});

export default OperationLevel;

 

이런식으로 Header.tsx는 OperationLevel.tsx를 참조하고, OperationLevel.tsx는 Header.tsx 안에 있는 dictonary를 참조해서 순환 참조가 발생했다.

해결 방법

npx madge --circular --extensions ts ./

이 명령어를 치게 되면 사진처럼 순환 참조가 발생한 지점이 나오게 된다.

이 결과를 기반으로 순환 참조를 해결할 수 있다.

 

혹은 ESLint의 rules에 import/no-cycle를 추가로 설정하여 순환 참조가 발생하는 것을 예방할 수 있다.

반응형

'개발' 카테고리의 다른 글

React input delay 해결법  (0) 2024.05.18
git 개념 정리  (1) 2024.05.01
Comments