--- kind: REFERENCE slug: a-port-that-offers-both-forms-has-chosen-the-unsafe-one title: 두 형태를 나란히 내놓는 포트는 이미 안전하지 않은 쪽을 고른 것이다 topic: retention-and-unbounded-growth project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: reference:a-port-that-offers-both-forms-has-chosen-the-unsafe-one verifiedOn: # 이 기록은 이번 회차에 실행 확인을 하지 않았다 --- # 두 형태를 나란히 내놓는 포트는 이미 안전하지 않은 쪽을 고른 것이다 ## 목적 인터페이스가 만든 기본값을 호출자의 선택으로 오인하지 않는다. 안전하지 않은 형태가 컴파일되면 그것은 언젠가 호출된다. ## 규칙 1. 안전하지 않은 쪽을 부르는 것이 컴파일되는지 본다 컴파일되면 그 형태는 기본값이다. 2. 두 형태를 가르는 표시가 있는지 본다 폐기 표시, 이름 차이, 가시성 차이 중 아무것도 없으면 호출자는 짧은 쪽을 고른다. 3. 두 형태가 진짜로 다른 용도인지 묻는다 다르면 이름이 그 차이를 말해야 한다. 오버로드로 두는 것은 차이를 이름에서 지우는 선택이다. 4. 같은 용도라면 하나를 지운다 지울 수 없으면 폐기 표시와 함께 부를 조건을 javadoc 에 적는다. ## 적용 조건 정리, 삭제, 조회처럼 결과 크기가 데이터 양에 비례하는 모든 연산. 그리고 같은 전이의 두 세대가 공존하는 인터페이스. ## 예외 두 형태가 서로 다른 호출자 집단을 위한 것이면 공존이 맞다. 그때 판정 기준은 이름이 그 구분을 담고 있는지다. ## 예시 inbox 와 outbox 포트가 정리 연산의 무제한 형태와 배치 제한 형태를 오버로드로 나란히 선언한다. 두 정리 잡이 무제한 쪽을 부르고, 배치 제한 쪽은 호출 지점이 0이다. 같은 포트에 같은 전이의 두 세대 메서드가 있다. 안전하지 않은 쪽에 폐기 표시가 없다. ## 관계 - **bounded 와 unbounded 오버로드를 나란히 둔 포트** 이 규칙이 나온 구조다. - **cleanup 이 스스로 막겠다고 적은 장애를 일으키는 형태로 호출된다** 이 규칙을 어긴 결과다. - **같은 개념의 두 어휘가 공존하면 하나를 죽은 것으로 표시한다** 같은 계열의 규칙이고, 이쪽은 어휘가 아니라 시그니처에 대한 것이다.