오늘은 팀원과 협업 팀워크중에 발생한 일이다.
나는 양방향 참조가 나쁜지 모르고 무분별하게 양방향 참조를 하고 있었다.
따라서 양방향 참조에 대해 공부하여 장단점을 나만의 말로 썼다.
양방향 참조의 단점
- 순환 의존성 (Circular Dependency) 위험: 양방향 참조는 두 클래스나 오브젝트가 서로를 참조할 때 발생합니다. 이로 인해 순환 의존성이 발생할 수 있으며, 이는 디버깅과 테스트가 복잡해지고 메모리 누수 같은 문제가 발생할 수 있습니다. 특히 객체가 서로를 참조하는 상태에서 적절히 해제되지 않으면 메모리 릭이 발생할 수 있습니다.
- 코드 복잡성 증가: 클래스 간의 결합도가 높아집니다. A가 B를, B가 A를 참조하는 경우 두 클래스가 서로 강하게 연결되어 유지보수가 어려워집니다. 이러한 구조에서는 한 클래스의 변경이 다른 클래스에 영향을 미치기 때문에 코드의 유연성이 떨어집니다.
- 테스트 어려움: 양방향 참조는 테스트를 어렵게 만듭니다. 단일 클래스를 독립적으로 테스트하는 것이 어려워지며, 모든 참조 객체를 설정해야만 테스트가 가능해질 수 있습니다.
양방향 참조의 장점
- 직관적인 설계: 어떤 경우에는 양방향 참조가 논리적으로 필요한 경우가 있습니다. 예를 들어, 서로 긴밀한 관계가 있어 서로에게 의존하는 객체들 사이에서는 양방향 참조가 더 자연스러울 수 있습니다. 예를 들어, 부모-자식 관계에서는 부모가 자식을 참조하고, 자식도 부모를 참조하는 경우가 적절할 수 있습니다.
- 데이터 접근의 용이성: 양쪽에서 필요한 데이터를 쉽게 참조할 수 있습니다. 양방향 참조가 없으면 한쪽에서만 데이터를 얻을 수 있고, 다른 쪽에서는 추가적인 작업을 통해 접근해야 할 수 있습니다. 양방향 참조를 사용하면 양쪽에서 쉽게 접근이 가능합니다.
양방향 참조를 피하는 방법
- **의존성 역전 원칙(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 |