본문 바로가기
Study/Java

[JAVA] 의존성이라는 비용이 이익보다 크다? Mock?

by novxerim 2023. 6. 15.

'의존성이라는 비용이 이익보다 크다'라는 말은, 일반적으로 소프트웨어 개발이나 시스템 설계에서 의존성이 가지는 부담이 그로 인해 얻는 이점을 상쇄할 정도로 크다는 의미이다.

의존성은 한 요소가 다른 요소에 의존하거나 종속됨을 나타낸다.

예를 들어, 클래스 A가 클래스 B를 사용하고 있다면, 클래스 A는 클래스 B에 의존성을 가지고 있다. 의존성은 코드 간의 상호작용을 통해 구현되며, 이는 모듈 또는 객체들 사이의 관계를 형성합니다.

- 의존성이 비용으로 작용하는 이유

1. 변경의 전파: 의존성이 있는 요소 중 하나를 변경하면, 그 변경은 의존하는 다른 요소에도 영향을 미칠 수 있다. 따라서 변경이 전파되는 것을 관리하고 조절하는 데 추가적인 비용이 발생할 수 있다.

2. 결합도 증가: 의존성이 많아질수록 코드의 결합도가 증가한다. 결합도가 높은 코드는 유지보수가 어렵고, 재사용성이 낮아질 수 있다. 또한, 하나의 요소를 변경하려면 여러 다른 요소에 대한 변경이 필요할 수 있다.

3. 테스트 및 디버깅 복잡성: 의존성이 많은 코드는 테스트와 디버깅이 어려울 수 있다. 의존하는 요소들을 일일이 모의(mock)하거나 대체하여 테스트를 작성하거나 버그를 추적하는 것이 복잡해진다.


즉, 시스템 설계나 소프트웨어 개발에서 의존성을 최소화하고 잘 관리해야 한다.

의존성을 최소화하면 코드의 유연성과 재사용성을 향상시킬 수 있으며, 변경에 대한 영향을 최소화하여 개발과 유지보수의 비용을 줄일 수 있다.

 

추가로, Mock은 실제 의존하는 요소의 동작을 흉내내는 가짜 구현체(데이터)를 말하는데, 위에서 '의존하는 요소들을 일일이 mock한다' 라는 것은 테스트에서 사용되는 개념이다.

테스트 할 대상이 다른 모듈이나 객체에 의존하고 있을 때, 그 의존성을 가진 실제 요소들을 대신하여 가짜(mock)로 대체하는 것을 말한다.

일반적으로 테스트할 대상이 다른 모듈 또는 객체와 상호작용하면서 예상한 동작을 수행하는지 확인하는 것은 중요하다. 그러나 의존하는 요소들이 완전히 개발되지 않았거나, 외부 서비스와의 연결이 필요한 경우 테스트가 어려울 수 있는데, 이때 의존하는 요소들을 일일이 mock으로 대체하여 테스트를 수행하곤 한다.

테스트 코드에서 mock을 사용하면 실제 의존성을 가진 요소와의 상호작용을 시뮬레이션하고, 원하는 동작을 가진 가짜 데이터를 제공하여 테스트를 수행할 수 있다.

이렇게 하면 외부 환경에 의존하지 않고 테스트를 독립적으로 실행할 수 있으며, 테스트의 안정성과 예측 가능성을 향상시킬 수 있다.

일반적으로 mocking 프레임워크를 사용해서 mock 객체를 생성하고 구성하는 것이 편하다.

몇 가지 자바에서 널리 사용되는 mocking 프레임워크로는 Mockito, EasyMock, PowerMock 등이 있고, 이런 프레임워크를 사용하면 쉽게 의존성을 가진 요소들을 mock으로 대체해 테스트할 수 있다(Mocking).

댓글