[클린코드] 8장 경계

wlsh44·2022년 10월 26일
1

클린코드

목록 보기
7/8

이번 장에서 말하는 경계란 오픈 소스와 같은 외부의 코드를 말하며, 어떻게 본인이 개발 중인 코드와 깔끔하게 통합시킬지에 대해 설명한다.

외부 코드 사용하기

인터페이스 제공자는 기능의 핵심을 벗어나지 않는 선에서 최대한 많은 사람들이 사용할 수 있도록 설계를 하고, 사용자는 본인이 원하는 기능만을 사용하기를 바란다.

자바의 Map같은 경우, 사용자에게 put, get, clear, size, remove 등 다양한 기능을 제공한다.

하지만 사용자가 이 Map을 이용해 작업을 마친 뒤 다른 사용자에게 다시 제공한다고 생각해보자.
재가공된 Map을 제공받은 또다른 사용자는 Map에 대한 모든 권한을 가지게 된다.

이런 문제점을 해결하기 위한 방법으로 Wrapper Class를 통해 캡슐화 하는 방법을 언급하고 있다.

캡슐화를 통해 새로운 인터페이스를 제공하면 다음과 같은 이점을 얻을 수 있다.

  • Map의 인터페이스가 변해도 나머지 프로그램에는 영향을 미치지 않는다.
  • 필요한 인터페이스만 제공할 수 있어, 비즈니스 규칙을 따르도록 강제할 수 있다.
  • 인터페이스의 행동에 대한 이름을 더 추상적으로 잘 지을 수 있다.

학습 테스트는 공짜 이상이다.

새로운 API를 사용하기 위해서는 학습이 필요하다.
학습 과정에서 작성하는 학습 테스트는 단순히 API에 대한 학습 그 이상의 효과를 준다.

  • API의 새 버전이 나오면 이전 버전과의 차이를 쉽게 알 수 있다.
  • API에 대한 이해도를 높여줄 수 있다.
  • API가 예상대로 작동하는지 검증할 수 있다.

깨끗한 경계

경계에 위치하는 코드는 깔끔히 분리한다. 또한 기대치를 정의하는 테스트 케이스도 작성한다.
통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다.

경계를 잘 설계한 코드라면 외부의 인터페이스에 휘둘릴 일도 없고 추후에 리팩토링하는데도 적은 비용이 든다.
또한 코드 가독성도 높아지고 휴먼 폴트를 줄일 수 있게 된다.

profile
정리정리

0개의 댓글