static 메서드가 Mocking이 불가능한 이유?
·
클린 코드
static 메서드는 클래스 레벨에서 실행되기 때문에 , 객체 인스턴스와 무관하게 동작한다.대부분의 Mocking 프레임워크는 객체의 메서드를 가짜로 대체하는 방식으로 동작하게 된다. 예를 들어 Mockito 같은 프레임워크에서는 객체 인스턴스를 가짜(Mock)으로 만들고, 해당 객체의 메서드만 오버라이드해서 동작을 변경할 수 있다.JVM에서 static 메서드는 클래스 로드 시점에 결정된다. 이미 메모리에 로드된 것이다. 근데 런타임 실행 중에 객체 기반의 Proxy(Mock)로 변경할 수 없다.  이를 PowerMock을 사용해 강제로 static 메서드도 Mocking 할 수 있게 만드는 것은 좋은 대안이 아니다.설계가 잘못되었다는 신호로 받아들여야 되는 것이다.  근데 이마저 final 클래스면 ..
final 메소드를 stub 해야하는 상황
·
클린 코드
final 메소드를 stub 해야 하는 상황이 생긴다면 , 무언가 설계가 잘못된 것이다. final 메서드는 오버라이딩이 불가능하고 Mocking도 어렵기 때문에 직접 호출 해야만 한다.즉, 테스트 시 해당 메서드의 실제 동작을 실행해야 하므로, 의존성이 강해짐.이 경우, 테스트 코드의 독립성이 깨지며 Mocking할 수 없어서 결합도가 높아짐.final 메소드를 stub 해야하는 상황이 생긴다면 , 무언가 설계가 잘못된 것이다.final 메소드는 변경하지 않겠다는 것인데 , stub 하는 상황이 생긴다는 것은 메소드를 overwrite 하겠다는 것이기 때문이다.final 메소드를 별도의 클래스로 만들어final 메소드에 걸린 의존성을 약하게 하는 방법을 생각해봐야 한다. Stub 이란테스트 코드에서 특..
객체의 결합도 의미와 단계 정리
·
클린 코드
정처기 공부 중 해당 부분은 정리해도 좋을 거 같아 정리해본다. 결합도는 모듈과 모듈 간의 의존 정도를 의미한다.  따라서 좋은 소프트웨어는 결합도는 낮을수록 좋다. 세기종류내용약함자료 결합도(Data Coupling)모듈간의 인터페이스로 전달되는 파라미터(데이터)를 통해서만 상호 작용이 일어나는 경우 스탬프 결합도(Stamp Coupling)모듈간의 인터페이스로 배열이나 객체, 자료 구조 등이 전달되는 경우↓제어 결합도(Control Coupling)어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하는 제어 요소를 전달하는 경우 외부 결합도(External Coupling)어떤 모듈이 외부에 있는 다른 모듈의 데이터를 참조하는 경우( 데이터, 통신 프로토콜 등) 공통 결합도(Common Couplin..