Unity 공부 - Action과 결합도

mingu Lee·2025년 3월 18일

Unity 공부

목록 보기
3/5

오늘 코드를 작성하다가 모르는 부분이 생겨 구글링 및 Copilot한테 물어보는 과정에서 코드를 이런 식으로 작성하면 결합도가 높아질 것이라는 답변을 봤다.

학교 과목 중에 객체지향개발론을 들으면서 결합도와 응집도 같은 개념을 배우긴 했는데 그 당시에는 감이 잘 안 잡혀서 개념만 공부하고 그냥 넘어갔다.

하지만 오늘 이 개념이 다시 나온김에 정확하게 무엇인지 한 번 공부해보려고 한다.

위키백과에 따르면 '소프트웨어 공학에서 결합도 또는 의존도는 어떤 모듈이 다른 모듈에 의존하는 정도를 나타내는 것'이라고 한다.

즉, 결합도가 높은 소프트웨어에서 특정 모듈을 수정했을 때 다른 모듈한테까지 영향을 크게 미친다면 결합도가 높다는 것이고, 거의 영향을 미치지 않으면 결합도가 낮다는 것이다.

그렇다면 내가 짠 코드는 뭐가 문제였을까?

살펴보니 Player Class에서 GameManager나 HUDManager에 있는 특정 함수를 호출하여 Update를 요청하고 있던 것이다.

이렇게 하면 GameManager의 코드가 수정되었을 때 Player의 코드도 필연적으로 수정되어야 하므로 결합도가 높은 코드라는 것이다.

이에 대한 방지책으로 Action을 사용하여 직접적인 의존성을 제거하는 것을 추천해줬다.

Action이 뭐냐하면 간단하게 말해서 어떤 Event가 발생했을 때 해당 Event를 구독하고 있는 Listener들에게 알람이 전달되어 연결되어있는 함수를 실행하는 것이다.

대충 위 사진같은 느낌이다.

위 사진에서 Evene A가 발생하면 구독자1, 2는 알람을 받고 Func C, D가 실행되지만 구독자 3은 알람을 받지 못 한다.

저렇게 하면 외부 Class를 알지 못해도 Event를 발생시켰을 때, 해당 Event를 구독하고 있는 Class들이 특정 함수를 실행시킬 수 있다는 것이다.

내가 작성했던 코드를 간단히 예로 들어보자면

  1. Action을 사용하지 않은 경우
    Player가 Score를 얻었을 때, GameManager에서 관리하는 Score 함수를 직접 호출하여 TotalScore를 Update 시킴.

  2. Action을 사용한 경우
    Player가 Score를 얻었을 때 Score Event를 발생시키고 Score 값을 인자로 넘겨주면, Score Event를 구독하고 있던 GameManager가 알람을 받으면서 파라미터로 주어진 Score 값을 직접 TotalScore에 Update 시킴.

물론 코드는 좀 더 복잡해지겠지만 큰 규모의 프로젝트에서 유지보수를 하기 위해서는 결합도를 낮추는 것이 상당히 중요하다고 한다.

profile
Github: https://github.com/dlalsrn

0개의 댓글