"깊이"가 다른 게임개발자 허민영

유저에서 게임까지, 철학에서 코딩까지, 본질을 보는 게임개발

내일배움캠프

TIL 0205 TextRPG 의존성 주입

허민영 2025. 2. 5. 20:40

Today I Learn:TextRPG 

GameManager 의존성 주입을 통한 구조 개선

1. 문제

게임 개발 중 GameManager.I()를 여러 번 호출하면서 코드의 결합도가 높아지고, 유지보수성이 낮아지는 문제가 발생했다. GameManager는 싱글톤 패턴을 사용하고 있지만, 여러 클래스에서 직접 참조하면서 코드의 가독성이 떨어지고, 변경 시 수정해야 할 부분이 많아지는 문제가 있었다.

2. 시도해본 것

  • GameManager.I()를 줄이기 위해 **의존성 주입(DI, Dependency Injection)**을 고려했다.
  • 기존의 정적(static) 방식에서 생성자 주입(Constructor Injection) 방식을 적용하여 GameManager의 인스턴스를 필요한 클래스에 전달하도록 시도했다.
  • ViewUtil 같은 유틸리티 클래스도 정적 메서드가 아닌 인스턴스 기반으로 변경하여 GameManager와의 결합도를 줄였다.

3. 해결

  • Program 클래스에서 GameManager의 인스턴스를 생성한 후, 생성자를 통해 필요한 클래스에 주입했다.
  • ViewUtil도 정적 클래스에서 일반 클래스 형태로 바꾸고, GameManager를 생성자를 통해 전달받아 사용하도록 변경했다.
  • 이를 통해 GameManager.I()를 직접 호출하는 부분을 최소화하고, 게임 전반의 코드 구조를 개선할 수 있었다.

4. 배운 점

  • **의존성 주입(DI)**을 활용하면 코드의 결합도를 낮추고 유지보수성을 높일 수 있다.
  • 생성자 주입(Constructor Injection)은 코드의 가독성과 확장성을 높이는 데 유용하다.
  • 정적 메서드가 많아질수록 테스트가 어려워지고 코드가 유연하지 않으므로, 가능한 한 인스턴스 기반으로 설계하는 것이 좋다.
  • 싱글톤을 사용할 때도 직접 참조하는 방식보다 주입하는 방식이 더 깔끔한 구조를 만든다.

이번 개선을 통해 더 확장 가능하고 유지보수하기 쉬운 게임 구조를 설계할 수 있었다.