Подчёркивание _name — лишь соглашение, не приватность. В классах — get name() / set name(v), для настоящей приватности #name.
Минус: скрытая работа при обращении к «полю» может удивить (side effects в getter — плохой тон).
Итог
Геттеры/сеттеры — API свойства с контролем доступа. Держите их простыми и предсказуемыми.
На собеседовании
Ожидают не заученную таблицу, а умение связать концепцию с багом из практики: что сломается, если выбрать неправильный вариант, и какой код вы напишете в реальном PR. Короткий пример и граничный случай обычно ценятся выше длинной теории.
Для чего нужны геттеры и сеттеры свойств объекта? · Sobeso