Какую цель преследует использование геттеров (get-методов) в ООП?

«Какую цель преследует использование геттеров (get-методов) в ООП?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Геттеры (методы доступа, например, getField()) — это публичные методы, возвращающие значение приватного поля. Их основная цель — реализация принципа инкапсуляции.

Зачем они нужны:

  1. Контролируемый доступ: Позволяют скрыть внутреннее представление данных и предоставить к ним безопасный интерфейс.
  2. Гибкость реализации: Внутренняя логика хранения поля может измениться, но публичный контракт (геттер) останется прежним.
  3. Ленивая инициализация или вычисление значения: Значение может быть вычислено или загружено только в момент первого вызова геттера.
  4. Добавление side-эффектов: Логирование, проверка прав доступа, уведомление наблюдателей при чтении.

Пример:

public class TemperatureSensor {
    private double celsius;

    // Геттер может преобразовывать данные
    public double getFahrenheit() {
        return (celsius * 9 / 5) + 32;
    }

    // Геттер с ленивой инициализацией кэша
    private String cachedReport;
    public String getReport() {
        if (cachedReport == null) {
            cachedReport = generateExpensiveReport();
        }
        return cachedReport;
    }
}

Использование геттеров вместе с сеттерами (setField()) формирует паттерн JavaBean.