241
4
장
의존성
야 한다.
이렇게 조언하는 첫 번째 이유는 한 번 가시성을 높이면 다시 되돌리기 어렵기 때문이다. 어
떤 크레이트 항목을 공개해버리면, 나중에 다시 비공개로 전환하기 위해서는 그 크레이트를 사
용하는 코드를 수정할 수밖에 없어서 결국 메이저 버전 올림(아이템
21
)을 해야 한다. 하지만
그 반대는 괜찮다. 비공개로 한 상태에서 나중에 공개로 전환할 때는 마이너 버전 올림만으로
도 충분한 경우가 많아서 크레이트 사용자에게는 아무런 영향을 미치지 않는다. 러스트의
API
호환성 가이드라인 (
https
://
oreil
.
ly
/
CkFWN
)을 읽어 보면 대부분
pub
항목에 대한 내용
이다.
비공개가 바람직한 중요하고도 미묘한 두 번째 이유는 선택권이 있기 때문이다. 공개된 항목이
많을수록 (호환되지 않는 변경이 없는 한) 나중에도 계속 고정돼야 할 항목도 많아진다. 데이
터 구조의 내부 구현 세부 사항을 공개해버리면, 나중에 더 효율적인 알고리즘을 적용할 기회
가 생길 때 중대한 변경이 발생할 수밖에 없다. 내부 헬퍼 함수를 공개하면, 그 함수의 세부 사
항에 의존하는 외부 코드가 생길 수밖에 없다.
물론 이런 문제는 수명이 길고 사용자도 많은 라이브러리 코드에서만 발생한다. 하지만 임
시 해결책이 결국 영구적으로 남기 마련이므로 이 조언을 따라 작성하는 습관을 들이는 것이
좋다.
또한 가시성을 제한하라는 조언은 이번 아이템
22
나 러스트 언어에만 적용되는 것은 아니다.
●
러스트
API
가이드라인 (
https://oreil.ly