본문 바로가기

TIL(Today I Learned)/오늘 무엇을 배웠을까

TIL(Today I Learned) - 25

오늘은 팀원과 협업 팀워크중에 발생한 일이다.

 

나는 양방향 참조가 나쁜지 모르고 무분별하게 양방향 참조를 하고 있었다.

 

따라서 양방향 참조에 대해 공부하여 장단점을 나만의 말로 썼다.

 

양방향 참조의 단점

  1. 순환 의존성 (Circular Dependency) 위험: 양방향 참조는 두 클래스나 오브젝트가 서로를 참조할 때 발생합니다. 이로 인해 순환 의존성이 발생할 수 있으며, 이는 디버깅과 테스트가 복잡해지고 메모리 누수 같은 문제가 발생할 수 있습니다. 특히 객체가 서로를 참조하는 상태에서 적절히 해제되지 않으면 메모리 릭이 발생할 수 있습니다.
  2. 코드 복잡성 증가: 클래스 간의 결합도가 높아집니다. A가 B를, B가 A를 참조하는 경우 두 클래스가 서로 강하게 연결되어 유지보수가 어려워집니다. 이러한 구조에서는 한 클래스의 변경이 다른 클래스에 영향을 미치기 때문에 코드의 유연성이 떨어집니다.
  3. 테스트 어려움: 양방향 참조는 테스트를 어렵게 만듭니다. 단일 클래스를 독립적으로 테스트하는 것이 어려워지며, 모든 참조 객체를 설정해야만 테스트가 가능해질 수 있습니다.

양방향 참조의 장점

  1. 직관적인 설계: 어떤 경우에는 양방향 참조가 논리적으로 필요한 경우가 있습니다. 예를 들어, 서로 긴밀한 관계가 있어 서로에게 의존하는 객체들 사이에서는 양방향 참조가 더 자연스러울 수 있습니다. 예를 들어, 부모-자식 관계에서는 부모가 자식을 참조하고, 자식도 부모를 참조하는 경우가 적절할 수 있습니다.
  2. 데이터 접근의 용이성: 양쪽에서 필요한 데이터를 쉽게 참조할 수 있습니다. 양방향 참조가 없으면 한쪽에서만 데이터를 얻을 수 있고, 다른 쪽에서는 추가적인 작업을 통해 접근해야 할 수 있습니다. 양방향 참조를 사용하면 양쪽에서 쉽게 접근이 가능합니다.

양방향 참조를 피하는 방법

  • **의존성 역전 원칙(DIP)**을 적용해, 양쪽이 서로 직접 참조하는 대신 인터페이스나 이벤트 시스템을 활용할 수 있습니다. 이를 통해 서로 직접 참조하는 것을 피하고, 결합도를 낮출 수 있습니다.
  • 단방향 참조로 전환: 하나의 클래스에서만 다른 클래스를 참조하게 만들고, 반대 방향으로의 참조는 메서드 호출이나 데이터를 전달하는 방식으로 해결할 수 있습니다.
  • 메시지 패싱: 서로 참조하지 않고 이벤트 시스템이나 메시지 패싱으로 데이터를 주고받도록 설계할 수 있습니다. 예를 들어, Unity에서는 EventSystem을 활용하거나, Observer 패턴을 사용해 서로 직접 참조하지 않고 이벤트로 통신할 수 있습니다.

요약

  • 양방향 참조는 필요한 경우 적절하게 사용할 수 있지만, 코드의 복잡성을 높이고 결합도를 증가시키기 때문에 신중히 사용해야 합니다.
  • 가능하다면 단방향 참조나 인터페이스, 이벤트 패턴 등을 통해 결합도를 낮추고 유지보수성을 높이는 것이 좋습니다.
  • 양방향 참조가 꼭 필요한 경우, 순환 참조와 메모리 누수 같은 문제를 염두에 두고 관리해야 합니다.

'TIL(Today I Learned) > 오늘 무엇을 배웠을까' 카테고리의 다른 글

TIL(Today I Learned) - 27  (0) 2024.10.23
TIL(Today I Learned) - 26  (0) 2024.10.22
TIL(Today I Learned) - 24  (0) 2024.10.17
TIL(Today I Learned) - 23  (0) 2024.10.16
TIL(Today I Learned) - 22  (0) 2024.10.15