리팩토링 3

고차 함수로 의존성 줄이기

2023년 8월 3일 추가: 이 내용을 포함한 카카오 테크밋에서 발표한 영상이 올라왔습니다. 스프링을 사용한 프로젝트에서 종종 보이는 어노테이션에 사용한 의존성 주입의 남용과 오랜 세월의 흐름으로 의도치 않게 서비스 간의 의존성 그래프가 복잡하게 강결합으로 묶이면서 코드를 읽기도 어렵고 단위 테스트를 구성하기도 어려운 상황이 생긴다. 아래는 어떤 백엔드 서비스의 의존성 그래프다. 순환 종속성이 포함된 복잡한 왼쪽의 의존성 그래프를 오른쪽의 단순한 의존성 그래프로 리팩터링하여 라이브 서비스에 반영하였다. 이번 글은 오랜 세월의 흐름으로 서비스 의존성 그래프가 복잡해진 라이브 서비스를 리팩터링한 내용을 일반화하여 작은 예제로 만들어서 정리한다. 이 글을 읽는데 필요한 배경지식으로 자바의 함수형 인터페이스를 ..

Dev 2022.09.22

테스트 용이성(Testability) 향상을 위한 델리게이션(Delegation)

이전 포스팅 ‘테스트 용이성(Testability) 향상을 위한 DI(Dependency Injection)’에서 이어지는 내용이다. 종속성 문제 테스트 코드 없이 개발할 때는 잘 인지하지 못하다가 테스트 코드를 넣으려고 할 때 만나는 문제 중 하나로 종속성 문제가 있다. 테스트 환경에서 특정 객체 하나를 생성하기 위해서 너무 많은 객체가 필요해지는 상황과 특정 객체가 내부적으로 다른 객체를 직접 생성하는 상황이 그것이다. 이런 상황은 몇 가지 방법으로 개선을 할 수 있다. 파라미터 수정 객체의 일부 값을 사용하려고 해당 객체를 파라미터로 받아서 생긴 종속성은 poor()가 info에서 얼마나 많은 정보에 접근하는지에 따라서 정리가 가능하다. 예를 들면 이런 식이다. 그 값들만 파라미터로 받는 것으로 리..

Dev 2019.08.01

테스트 용이성(Testability) 향상을 위한 DI(Dependency Injection)

이전 포스팅 BDD(Behaviour-Driven Development)에 대한 간략한 정리에서 같이 다루려고 했던 내용이다. 테스트 용이성이랑 말 그대로 테스트 대상을 얼마나 테스트하기 쉬운가에 대한 척도이다.테스트 대상이 얼마나 복잡한가? 얼마나 결합도가 높은가? 등 몇 가지 내용이 있지만 여기서는 테스트 용이성에서 결합도와 Mocking 에 대한 내용만을 간단히 다룬다.최대한 코드를 배제하겠다. 이 글에서 Mocking 은 Mocking 객체를 의미하며 이를 간단히 말하면 실제 객체를 흉내내는 가짜 객체를 하나 만드는 것이다. 실제 클래스와 동일한 인터페이스를 가지고 있어서 외부에서 볼 때는 가짜인지 모르고 사용할 수 있도록 설계된 클래스를 인스턴스화 한 것을 말한다. 이야기 진행을 위해서 테스트 ..

Dev 2017.06.19
반응형