답변:
짧은 답변 : 예
더 긴 답변 :
그렇습니다. 그러나 모든 것을 비공개로 수업을 시작하는 제안으로 해석되어서는 안됩니다. 이러한 접근 방식은 인터페이스를 설정하기 전에 구현 세부 사항에 중점을 두어 클래스 디자인을 의미합니다.
클래스를 디자인 할 때 고려해야 할 가장 중요한 측면 중 하나는 클래스 사용 방법입니다. 여기에는 개인 / 구현 세부 사항에 대해 생각하기 전에 공개 방법에 대한 생각이 포함됩니다.
또한, "이 수업에 대한 단위 테스트를 어떻게 작성합니까?" -실제로 단위 테스트를 작성하지 않더라도 물어볼 중요한 질문입니다. (관련 : "테스트 가능한 코드를 홍보하는 디자인 원칙은 무엇입니까?" )
따라서 공용 인터페이스를 정의한 후에는 나머지를 개인용으로 기본값을 지정하는 것이 좋습니다. 대부분의 경우 일반적으로 클래스 외부의 다른 항목에 대해서는 중요하지 않은 구현 세부 사항이기 때문입니다.
"그런 다음 서브 클래스에 필요한 경우 보호로 업그레이드하거나 다른 클래스에 필요한 경우 공용으로 업그레이드합니까?"
그것은 잘못된 접근법입니다. 디자인 타임에, 당신은 당신이 무엇을 공용 액세스 알아야 합니다 제공 할 수 있습니다. 수업의 전체 목적이기 때문에 일반적으로 공개 액세스 권한을 부여합니다. 그리고 서브 클래스가 사물에 액세스하기를 원 하므로 보호 된 액세스 권한을 부여 합니다. 그리고 당신은 다른 사람의 사업이 아닌 것을 위해 개인을 사용합니다.
이제 누군가 가 접근 할 수없는 것들에 접근 해야 한다면 , 그 필요성 에 대해 정말로 열심히 생각 해야합니다 . 액세스 가 필요 하지 않거나 디자인이 잘못되었습니다. 디자인 이 잘못되었거나 공개되지 않은 것이 공개되어 있으므로 변경하십시오. 그러나 디자인이 옳다면 필요 에 문제 가 있으므로 디자인을 손상시키는 대신 수정 하십시오.
private
또는 protected
?
객체 지향 프로그래밍의이 측면을 이해하는 열쇠는 데이터 캡슐화 의 개념입니다 . 아이디어는 구현 세부 사항을 숨겨 클래스를 이해하기 쉽게 만드는 것입니다. 이것을 데이터 숨김 이라고 합니다 . 따라서 클래스를 사용하는 데 필요한 함수 만 공개 (공개)하려고합니다. 이 함수는 클래스에 대한 인터페이스 입니다.
자동차의 바퀴와 같은 인터페이스를 생각하십시오. 휠을 돌려 차의 방향을 결정하지만, 덮개 아래에는 회전 밸브, 유압 장치, 바퀴 회전을 변경하는 풀리가 있지만 차를 운전하는 기계 엔지니어는 필요하지 않습니다.
따라서 귀하의 질문에 대한 대답은 그렇습니다. 가능한 한 다른 클래스에서 클래스에 대한 많은 세부 정보를 숨기려고합니다. 공개, 비공개 또는 보호 대상이되는시기를 이해하는 것은 배우기 쉽지만 마스터하기는 어렵습니다.