상태 정의
필요한 멤버와 파생 가능한 값을 나누고, 저장해야 할 값만 객체 안에 둔다.
객체 지향 코드는 멤버를 숨기는 데서 끝나지 않는다. 생성 이후 항상 참이어야 하는 조건을 public API가 지켜 주는지가 핵심이다.
필요한 멤버와 파생 가능한 값을 나누고, 저장해야 할 값만 객체 안에 둔다.
생성자가 불변식을 만족시키지 못하면 객체를 만들지 못하게 한다.
반쯤 유효한 객체는 버그를 뒤로 미룬다.외부가 멤버를 직접 조합하지 않고 의미 있는 메서드를 통해 상태를 바꾸게 만든다.
class Score {
public:
explicit Score(int value) : value_(value) {
if (value < 0 || value > 100) throw std::out_of_range("score");
}
int value() const { return value_; }
private:
int value_;
};