I am learning OOP - I have read this answer a number of times and now slowly start to understand some of the practical uses of public interfaces (getters and setters). I understand there is no need to provide public accessors/mutators to every single object property as that breaks encapsulation.
However, in the answer, it is implied that any properties to be manipulated only within that object (i.e. those that don't have a public interface) don't require setters at all. Following this thought, that would imply the same about getters too.
When following S in SOLID, classes become quite small. As such I still use getters and setters for all my properties since adding validation to setters is easy. However, any property that shouldn't be accessed from outside the object I simply designate those setters / getters as protected.
This allows me to keep the validation for use within private methods while still restricting public access. I understand that getters and setters are used to stop other objects directly manipulating another objects properties, but as for 'private' setters / getters - is this necessary (validation aside) or even general practice?
The only other place I see reference to 'private' setters / getters is this answer which touches on inheritance and using private setters / getters to access the parent properties, which makes sense from an encapsulation perspective.