Das passt ja eh, du willst Werte setzen können aber das was gesetzt wird auch überprüfen!
Das würde aber nur den Setter motivieren.
Die Motivation für den Getter kommt aus dem Wunsch, die Implementation der Klasse ändern zu können, ohne dass es einen Einfluss auf andere Klassen hat, die deine Klasse verwenden.
Beispiel: du schreibst eine Klasse ohne Accessor (mit 2 s), auch
Mutator genannt. Wenn eine andere Klasse deine Klasse verwenden will, greift sie direkt auf die Member-Variablen zu. Jetzt will jemand deine Klasse aber in einem Server verwenden, der parallel über mehrere Threads verteilt Requests verarbeitet und dafür deine Klasse verwenden soll. Das bedeutet, du musst den Zugriff Thread-sicher machen. Und das bedeutet, dass man nicht mehr direkt auf die Member-Variablen zugreifen kann. Statt dessen muss der Zugriff über alle Threads synchronisiert werden. Das bedeutet, dass vor jedem Zugriff ein Lock akquiriert werden muss. Hättest du eine Klasse mit Getter programmiert, wäre es problemlos möglich, diesen Mechanismus in deinem Getter zu ergänzen ohne, dass es Einfluss auf den Code der anderen Klassen hätte. Wenn du eine Klasse ohne Getter schreibst, musst du sie spätestens jetzt auf Getter umstellen und alle anderen Klassen müssen geändert werden, weil dort an Stelle des Member-Variablen-Zugriffs jetzt der Getter-Aufruf stehen muss.
Und um sich diese Änderung im Falle eines Falles zu ersparen, verwendet man direkt von Anfang an gleich Getters, auch wenn man sie in den meisten Fällen eigentlich nicht braucht. Und zusätzlich spekuliert man darauf, dass der Compiler sie weg optimiert, wenn sie nicht wirklich ausprogrammiert sind, denn ein Methoden-Aufruf ist eigentlich langsamer als der Zugriff auf eine Member-Variable.