관리 메뉴

CASSIE'S BLOG

[도서] 클린 코드 정리 본문

PROGRAMMING/기타

[도서] 클린 코드 정리

ITSCASSIE1107 2023. 6. 10. 11:38

의존성 주입

사용과 제작을 분리하는 강력한 메커니즘 하나가 의존성주입 (Dependency Injection)이다. 

의존성주입은 제어역전기법을 의존성관리에 적용한 메커니즘이다. 

제어역전에서는 한 객체가 맡은 보조책임을 새로운 객체에서 전적으로 떠넘긴다.

새로운 객체는 넘겨받은 책임만 맡으므로, 단일책임 원칙 (Single Responsibility Principle)을 지키게 된다

의존성 관리 맥락에서 객체는 의존성 자체를 인스턴스로 만드는 책임을 지지않는다. 대신에 이런 책임을 다른 '전담' 메커니즘에 넘겨야만한다. 그렇게 함으로써 제어를 역전한다. 초기설정은 시스템 전체에서 필요하므로 대개 '책임질' 메커니즘으로 main루틴이나 특수 컨테이너를 사용한다. 

 

MyService myService = (MyService)(JndiContext.lookup("NameOfMyService)); 

호출하는 객체는 (반환되는 객체가 적절한 인터페이스를 구현하는 한) 실제로 반환되는 객체의 유형을 제어하지않는다. 대신 호출하는 객체는 의존성을 능동적으로 해결한다.

 

TDD

세 가지 법칙

1. 실패하는 단위 테스트를 작성할 떄까지 실제 코드를 작성하지 않는다.

2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다

3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

근데 이 법칙으로 일하면 실제 코드를 사실상 전부 테스트하는 테스트케이스가 나온다.

테스트는 유연성, 유지보수성, 재사용성을 제공한다.

코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위테스드다. 

테스트 케이스가 있으면 변경이 두렵지않으니까!

 

깨끗한 테스트 코드 만드는 방법

세 가지가 필요하다. 가독성, 가독성, 가독성

테스트 당 assert하나 

JUnit으로 테스트 코드를 짤때마다 함수마다 assert문을 단 하나만 사용해야한다. 어렵겠지만 확실한 장점이 있다. 아니면

테스트 함수마다 한 개념만 테스트해라. 

 

F.I.R.S.T.

깨끗한 테스트의 다섯 가지 규칙 

빠르게 FAST: 테스트는 빨라야 자주 돌릴 엄두가 난다. 

 

독립적으로 INDEPENDENT: 각 테스트는 서로 의존하면안된다. 한 테스트가 다음 테스트가 실행될 환경을 준비해서는 안된다. 각 테스트는 독립적으로 어떤 순서로 실행해도 괜찮아야한다. 테스트가 서로에게 의존하면 하나가 실패할 때 나머지도 잇달아 실패하므로 원인을 진단하기 어려워지므로 후반 테스트가 찾아내야할 결함이 숨겨진다.

 

반복가능하게 Repeatable: 테스트는 어떤 환경에서도 반복 가능해야한다. 실제환경, QA환경, 버스를 타고 집으로 가는길에 사용하는 (네트워크에 연결되지 않은) 노트북환경에서도 실행할 수 있어야한다. 테스트가 돌아가지 않은 환경이 하나라도 있다면 테스트가 실패한 이유를 둘러댈 변명이 생긴다. 게다가 환경이 지원되지않기에 테스트를 수행하지 못하는 상황에 직면한다.

 

자가검증하는 Self-validating: 테스트는 bool값으로 결과를 내야한다. 성공 또는 실패다. 통과 여부를 알려고 로그 파일을 읽게 만들어서는 안된다. 통과 여부를 보려고 텍스트 파일 두 개를 수작업으로 비교하게 만들어서도안된다. 

 

적시에 Timely: 테스트는 적시에 해야한다. 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현한 다음에 테스트 코드를 만들면 실제 코드가 테스트하기 어렵다는 사실을 발견할지도 모른다. 

 

정리 

테스트 코드는 지속적으로 깨끗하게 관리하자. 표현력을 높이고 간결하게 정리하자. 테스트 API를 구현해 도메인 특화 언어 (Domain Specific Language) DSL를 만들자. 그러면 그만큼 테스트 코드를 자기가 쉬워진다.

 

 

반응형

'PROGRAMMING > 기타' 카테고리의 다른 글

코딩 추천 책 정리  (0) 2023.06.16
noSQL  (0) 2023.06.13
컴퓨터 책 및 강의 추천  (0) 2023.06.05
인텔리제이 단축키 모음 꿀팁  (0) 2023.05.19
구글 키워드 검색법  (0) 2023.05.18