NEXT STEP TDD 수업을 들으며 기능을 구현하던 와중 private method를 테스트하고 싶다는 생각이 들었는데요. private method를 테스트하면 좋지 않다고 들어왔기 때문에 멈칫하게 되었고, 이에 정말 private method 는 테스트하면 안좋은걸까라는 의문이 생겨서 이 글로 정리해봅니다.
여러 자료를 살펴보면 private method를 테스트하는 것이 변경에 취약한 구조를 만든다고 합니다.
이에 대한 이해를 위해 public method와 private method의 변경 가능성에 대한 전제 하나를 만들고 가야하는데요.
public method는 클래스 외부에 공개된 계약으로 간주됩니다. 따라서 다른 클래스나 모듈에서 이를 의존하고 있을 가능성이 높습니다. 이러한 계약은 상대적으로 안정적이어야하는데요. 즉, public method는 요구사항 변경에 따라 동작 자체가 바뀌는 경우에만 변경되며, 이러한 변경은 최소화된다는 전제를 두고 있습니다.
반면 private method는 클래스 내부 동작을 지원하는 구현 세부사항입니다. 즉, private method는 특정 로직을 재사용하거나, 복잡한 로직을 분리해 가독성을 높이는 역할을 하죠. 따라서 로직 재구성, 코드 리팩터링, 성능 최적화 등의 이유로 언제든지 자유롭게 변경될 수 있어야 하며, 그 변경이 외부에 영향을 주면 안됩니다.
즉, public method는 변경이 적어야하며, private method는 변경에 자유로워야한다는 것입니다.
이런 전제 하에 다시 private method를 테스트하는 것이 왜 변경에 취약한 구조를 만드는지 알아봅시다.