CleanCode

[CleanCode] 경계

zamezzz 2023. 11. 11. 09:05

CleanCode - 경계

 

시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 거의 없습니다.
때로는 패키지를 사고, 때로는 오픈 소스를 쓰며, 때로는 다른 부서에서 만든 컴포넌트를 쓰며 개발합니다.
이렇듯 외부 코드를 사용하는 경우가 많은데, 이 외부 코드를 우리 코드에 깔끔하게 적용시켜야 합니다.

책에서는 이러한 경계를 깔끔하게 처리하는 방법을 안내해주고 있습니다.

 

예시로 java.util.Map 클래스가 등장합니다.

Map은 굉장히 다양한 인터페이스로 수 많은 기능을 제공하고 있습니다.

ex) clear(), remove(Object key), put(Object key, Object value)...


Map을 단순히 반환하면 사용자가 불필요한 기능까지 전달하거나 변환의 책임까지 전가합니다.

유용하지만 위험도도 큽니다.

하지만 무조건 Map을 쓰지 말거나 캡슐화를 하라는 것은 아니고, Map과 같은 경계 인터페이스를 이용할 때 주의하라는 의미입니다.

외부 코드를 사용하면 효율적일 수 있습니다. 

하지만 문제가 생겼을 경우 우리의 버그인지, 라이브러리의 버그인지 알기 어려울 수 있습니다.
코드를 익히거나 통합하기도 어렵습니다. 그래서 외부 코드를 쓰기 전 간단한 테스트 케이스를 작성하는 것을 추천합니다.

 

이를 학습 테스트라 합니다.
학습 테스트는 프로그램에서 사용하려는 방식대로 외부 API를 호출하고, 이릴 제대로 이해하는지 확인하는 셈입니다.
학습 테스트에 드는 비용은 없고, 이해도를 높여주는 정확한 실험이라 할 수 있습니다.

투자하는 노력보다 얻는 성과가 더 크기 때문에 책에서는 아주 추천하고 있습니다.



마무리

경계에 위치하는 코드는 깔끔히 분리하고, 기대치를 정의하는 테스트 케이스도 작성합니다.
자칫하면 외부 코드에 휘둘리기 때문입니다. 

 

무조건 사용하거나 쓰지 않는 것이 아니라, 필요에 따라 주의해서 잘 사용해야 한다가 결론인 것 같습니다.

반응형

'CleanCode' 카테고리의 다른 글

[CleanCode] 클래스  (0) 2023.11.13
[CleanCode] 단위 테스트  (1) 2023.11.11
[CleanCode] 오류 처리  (0) 2023.11.10
[CleanCode] 객체와 자료 구조  (0) 2023.11.04
[CleanCode] 형식 맞추기  (2) 2023.11.04