Inflearn brand logo image

인프런 커뮤니티 질문&답변

로켓라쿤님의 프로필 이미지
로켓라쿤

작성한 질문수

실전! 언리얼 소울라이크 개발: A to Z

장비 아이템과 인터렉션 시스템

CombatComponent, Weapon 참조

해결된 질문

작성

·

118

0

혹시 CombatComponent랑 Weapon클래스에서처럼 서로 참조하고 있는 구조가 현업에서도 많이 활용되고 있는지 궁금합니다.

원래 많이 사용되는지 아님 최대한 줄여야하는 건지 아님 적당한 선에서는 사용해도 무방한지..?!
감이 오지 않습니다,,

답변 2

1

Spector님의 프로필 이미지
Spector
지식공유자

안녕하세요! 답변을 드리려고 왔는데, AI 인턴분께서 벌써 아주 적절한 답변을 주셨네요. ㅎㅎ

말씀하신 것처럼 객체 간의 상호 참조를 최소화하는 것이 좋긴 하지만, 완전히 피하기는 어렵다고 생각합니다. 결국 이러한 상호 참조로 인해 발생하는 문제들을 여러 방법을 통해 최대한 줄이거나 안전하게 구현하면서 적절히 활용하는 것이 중요하겠죠.

가까운 예로 Controller와 Pawn의 관계를 들 수 있습니다. Controller는 자신이 조종하는 Pawn을 참조해야 하고, Pawn 역시 자신을 조종하는 Controller를 참조하여 로직을 구현해야 하는 경우가 생기니까요. 이처럼 역할별로 컴포넌트를 나누어 개발하다 보면 흔히 마주칠 수 있는 상황이라고 생각합니다.

물론 학문적으로는 논란의 여지가 있을 수 있지만, 실제 개발 현장에서는 유연한 사고를 바탕으로 문제를 해결하는 것이 더 중요하다고 생각합니다.

특히 디자인 패턴 분야에서 싱글톤 패턴을 무조건적으로 나쁘게 보는 것과 같은 논쟁이 많죠.

 

로켓라쿤님의 프로필 이미지
로켓라쿤
질문자

우와 자세한 답변 감사합니다 아니 그러고보니 controller랑 pawn만 해도 벌써 서로 참조하고 있었네요..! 유연하게 개발할 줄 아는 것도 개발자의 덕목이군요!!

1

안녕하세요, 인프런 AI 인턴입니다. 로켓라쿤님.

객체 간의 상호 참조 문제는 소프트웨어 개발에서 자주 다루어야 할 주제 중 하나입니다. 특히 게임 개발에서는 복잡한 객체 간의 상호작용이 존재하기 때문에 서로를 참조하는 구조가 필요할 수 있습니다.

  1. 서로 참조하는 구조의 장단점:

    • 장점: 두 객체가 서로의 상태나 메서드를 필요로 할 때, 상호 참조를 통해 직접적인 상호작용이 가능합니다. 이는 복잡한 상호작용이 필요한 게임 로직에서 유용할 수 있습니다.
    • 단점: 그럼에도 불구하고 이런 구조는 메모리 관리의 측면에서 복잡성을 증가시킬 수 있으며, 특히 순환 참조(Circular Reference)에 의한 메모리 누수가 발생할 수 있습니다. 또한, 테스트 및 유지보수가 어려워질 수 있습니다.
  2. 현업에서의 사용:

    • 현업에서는 필요에 따라 상호 참조를 허용하되, 가능한 한 이를 줄여 코드의 복잡성을 낮추고 마이크로서비스 아키텍처나 이벤트 기반 구조를 활용하여 객체 간 느슨한 결합을 선호합니다.
  3. 적절한 사용 방법:

    • 상호 참조를 줄이고, 의존성을 관리하기 위해 대리자(Delegates), 이벤트(Event Systems), 인터페이스(Interfaces)를 활용하는 것이 실무에서 흔히 사용되는 방법입니다.
    • DI(Dependency Injection) 패턴을 도입하여 런타임에 필요한 객체의 의존성을 주입함으로써 순환 참조를 자연스럽게 해결하기도 합니다.

관련하여 아래 URL에서 더 깊이 있는 토론을 확인하실 수 있습니다:
- 어떤 경우에 객체 간의 상호 참조를 피해야 하는가?

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

로켓라쿤님의 프로필 이미지
로켓라쿤

작성한 질문수

질문하기