문제
소프트웨어 모듈 설계에서 **팬인(Fan-in)**과 **팬아웃(Fan-out)**의 개념을 각각 설명하고, 바람직한 모듈 구조를 위해서는 어떤 특성을 가져야 하는지 서술하시오.
정답
팬인은 특정 모듈을 호출하는 다른 모듈의 개수이고, 팬아웃은 특정 모듈이 호출하는 다른 모듈의 개수이다. 바람직한 구조는 높은 팬인과 낮은 팬아웃을 가져야 한다.
팬인팬아웃높은 팬인낮은 팬아웃
해설
팬인이 높다는 것은 해당 모듈이 여러 모듈에서 재사용되고 있다는 의미로 재사용성이 높음을 나타낸다. 팬아웃이 낮다는 것은 해당 모듈이 다른 모듈에 대한 의존성이 적다는 의미로 결합도가 낮음을 의미한다. 이러한 구조는 모듈의 독립성을 높이고 유지보수성을 향상시킨다.