set up getters to prevent direct access to props