다른 사람들이 말했듯이 개인 변수는 객체가 일관성이없는 상태로 이어지는 미스 사용을 피하고 버그와 예기치 않은 예외를 추적하기가 어렵습니다.
그러나 다른 한편으로는 대부분 다른 사람들이 무시한 것은 보호 된 분야에 관한 것입니다.
확장 된 하위 클래스는 보호 된 필드에 대한 전체 액세스 권한을 가지므로 해당 필드가 공용 인 것처럼 개체를 취약하게 만들 수 있지만 해당 취약성은 해당 클래스를 더 많이 노출하지 않는 한 자체 확장 클래스로 제한됩니다.
따라서 공개 필드는 좋은 것으로 간주하기가 어렵고 현재까지 사용하는 유일한 이유는 구성 매개 변수로 사용되는 클래스에 대한 것입니다 (필드가 많고 논리가없는 매우 간단한 클래스이므로 클래스는 매개 변수로만 전달됩니다) 일부 방법).
그러나 개인 필드는 다른 사용자에 대한 코드의 유연성을 낮 춥니 다.
유연성 대 문제, 장단점 :
보호 필드가있는 바닐라 클래스에서 코드로 인스턴스화 된 객체는 안전하며 전적으로 귀하의 책임입니다.
반면, 코드 사용자가 인스턴스화 한 보호 필드로 클래스를 확장하는 객체는 사용자의 책임이 아니라 책임입니다.
따라서 잘 문서화되지 않은 보호 필드 / 방법 또는 사용자가 이러한 필드와 방법을 어떻게 사용해야하는지 실제로 이해하지 못하는 경우 자신과 사용자에게 불필요한 문제를 일으킬 가능성이 높습니다.
다른 한편으로, 대부분의 물건을 사적인 것으로 만들면 사용자의 유연성이 떨어지고, 일을 처리하기 위해 포크를 만들고 유지하기를 원하지 않을 수 있기 때문에 유지 관리되는 대안을 찾지 않아도 될 수도 있습니다.
따라서 개인, 보호 및 공공의 균형이 정말 중요합니다.
이제 개인과 보호를 결정하는 것이 진짜 문제입니다.
언제 보호를 사용해야합니까?
필드가 매우 유연하다는 것을 이해할 때마다 보호 된 것으로 코딩해야합니다. 그 유연성은 null이되는 것 (null이 항상 확인되고 예외를 발생시키지 않는 유효한 상태로 인식되는 것)에서 클래스 ex에 의해 사용되기 전에 제약 조건을 갖는 것까지입니다. > = 0, <100 등이며 초과 / 미달 유량 값에 대해 자동으로 고정되어 최대 경고 메시지를 표시합니다.
따라서 보호 된 필드의 경우 getter를 만들고 필드 변수를 직접 사용하는 대신 게터를 사용할 수 있지만 다른 사용자는 특정 코드에 대한 유연성을 원할 경우 사용하지 않을 수 있습니다. : 확장 클래스에서 음수 값을 올바르게 사용하려는 경우.