TDD를 생각한다면 꼭 한 번 먼저 봤으면 하는 이야기 ft.이규원 TDD 강의

2022. 10. 20. 14:44기초 Java Script

모듈화를 통한 정보숨김

인터페이스를 '무엇'을 표현하는 코드 단위라고 본다면 코드 자체들은 '협력'을 하고 있기 때문에 모든 인터페이스들은 알게 모르게 연결되어있다. 하지만 개발을 하기 위해서 모든 인터페이스를 이해할 필요는 없다! 어떤 일을 하는지만 중요하지, 어떻게 일 하는지는 중요하지 않다. 그래서 정보숨김을 통해서 불필요한 정보는 내부 인터페이스에서 처리되고 수정을 해도 영향을 받도록 만들어서 커뮤니케이션 자원을 아끼는 것이 중요!

 

간접입력 && 간접출력

주황: 간접입력  연두: 간접출력

간접입력의 경우 시스템에 요청이 들어오게 되면 바로 의존성이 있는 로직에 도달하여 프로세싱을 하고 출력을 하기 때문에 시스템 입장에선 입력, 의존성 로직 입장에선 출력이 된다. 간접출력의 경우 시스템에 요청이 들어오게 되면 시스템에서 의존성 로직에 입력을 하고, 의존성 로직에서는 시스템으로 다시 출력을 하게 된다.

 

Sociable 테스트 VS Solitary 테스트 

sociable 테스트는 의존성이 있는 로직 , 테스트 할려고 하는 단위를 운영에서 사용하는 그대로 사용하는 것을 말하고 solitary는 따로 테스트 환경을 만들어서 테스트를 한다고 간단하게 말 할 수 있다. 그렇다면 solitary 테스트가 더 안전하고 효율적으로 보일 수 있으나 '가정의 안정도'에 따라 테스트 대역의 복잡도에 따라서 안정도가 낮아져서 원하는 테스트를 구현하지 못 할 가능성이 커진다! 

출처: https://algopoolja.tistory.com/119

코드 적응력

모듈화가 잘 되어있고, 정리가 잘 되어서 협업자가 이해하고 읽기 쉬운 구조와 컨벤션을 가지고 있으면서 분리, 분해, 재설계, 활용이 쉬울수록 코드 적응력이 높다고 표현한다. 단위 테스트를 잘 진행하기 위해서는 하위 시스템을 잘 분리할 수 있어야 하며, 개방-폐쇄 원칙 (Open-Closed principle)의 원칙을 따라 모듈들은 확장에 대해서는 열려 있고, 수정에 있어서는 닫혀 있어야한다. 이는 typescript에서 extend의 개념처럼 상속을 받아 추가할 살을 덧 붙이고, 부모 객체에 대해서는 수정을 남용하는 것을 막는 것이 좋은 것과 같은 맥락이다.