기본적으로 클라이언트 코드를 사용하지 않는 한 약정하지 않습니다. 메소드를 public으로 만들 때, 적어도 일부 컨텍스트에서는 클라이언트 코드를 조정하지 않고 메소드를 변경하지 않으려 고합니다.
메서드를 public으로 만들고 누군가가 사용한다고 가정합니다. 그런 다음 나중에 메서드를 변경해야한다는 것을 알게됩니다. 이제 두 가지 선택 사항이 있습니다.
- 변경하려는 클라이언트와 조정하십시오.
- 클라이언트를 중단하십시오.
가능한 경우 # 2를 피하십시오.
작은 시스템의 경우 # 1이 그리 중요하지 않을 수 있습니다. 그러나 코드에 따라 더 많은 클라이언트 코드가 있으므로 # 1은 실제로 문제가 될 수 있습니다. 어떤 이유 (일정, 사업상의 이유, 기술적 이유 등)에 관계없이 누군가는 귀하의 변화를 흡수 할 준비가되어 있지 않을 수 있습니다.
이러한 딜레마를 피하는 좋은 방법은 어떤 이유가있을 때까지 약정을 피하는 것입니다. 이것은 프로그래밍 외에서도 일반적으로 인생에서 할 수있는 현명한 일입니다. 그러나 프로그래밍에도 적용됩니다. 가시성 측면에서 공개 가시성보다 제한된 가시성을 선호하는 것을 의미합니다.
예. 내가 전자 상거래 주문 관리 라이브러리를 쓰고 있어요 말해, 나는 방법을 쓰기 모든 라이브러리의 세금 계산 라이브러리에 내부적으로 발생에도 불구하고
public double computeTax(double price) { ... }
. 저는 세금 계산기를 세계와 공유하지 않는 것이 수치 스럽기 때문에이 방법을 공개합니다.
많은 사람들이이 방법이 훌륭하다는 데 동의하고이를 사용하는 앱을 만듭니다.
그러면 달러 금액을 나타 내기 위해 복식을 사용하는 것이 완전히 잘못되었음을 지적 할 수 있습니다 (부동 소수점 표현은 근사값 일뿐 돈으로는 좋지 않음). 나는 완전히 이전 방법 (근본적으로 뭔가를 잘못 사용하여 사람을 원하지 않는다), 그리고
public Currency computeTax(Currency price) { ... }
로 교체하지만 지금은 클라이언트 코드의 무리를 깰거야 제거 할 것인지를 결정하는 원래 방법을 사용합니다.
도서관이 정말로 제공하고있는 것의 일부가 아니었기 때문에 내가 자기 세금 계산서를 지켰다면 더 좋을 것입니다. 이제 나는 딜레마에 빠지게된다.
예. 왜냐하면'public' 클래스 만 외부 세계에서 볼 수 있기 때문입니다. – lxcky
좋아 - 그래서 나는 다음과 같은 클래스 말할 수 구성하기를 원한다면 - 클래스 1 : "플랫폼"(MySQL은/SQL 서버/오라클) - 목록 플랫폼 클래스 2 : "데이터 저장소" - 클래스 - 3 : "오라클" - 생성 - updateByHostService - listAll -Class-4 : "세일즈 포스" - 생성 - updateByURL - listAll I 패키지에 모든이를 포장한다면, 추천 설계는 무엇인가 이 패키지의 공개 API는 무엇입니까? 그리고 왜? (나는 개별 클래스의 모든 메소드의 UNION을 공유하는 방법을 제공한다고 생각할 수 있습니다 .- 멋진 것은 아닙니다.) 감사합니다! –