Members

멤버 함수와 멤버 변수는 객체의 동작과 상태를 나눈다

멤버 변수는 객체가 기억해야 할 최소 상태이고, 멤버 함수는 그 상태를 어떤 언어로 바꿀지 정한다. const와 static이 경계를 또렷하게 만든다.

01

저장값 축소

다른 멤버에서 계산 가능한 값은 캐시 필요가 있을 때만 저장한다.

02

const를 붙인다

조회 함수가 객체를 바꾸지 않는다는 사실을 타입 시스템에 맡긴다.

03

static 분리

객체마다 다른 값과 클래스 전체에 걸친 설정을 섞지 않는다.

멤버 변수
불변식의 재료 서로 맞물리는 값이 많을수록 public 변경 통로를 좁혀야 한다.
초기값이 없으면 생성자 책임이 커진다.
멤버 함수
상태를 다루는 문장 setX보다 reserve, commit, cancel처럼 도메인 동사를 쓰면 조건이 드러난다.
이름이 설계 리뷰를 돕는다.
const 함수
읽기 보장 논리적으로 바뀌지 않는 동작만 const로 선언한다.
mutable 캐시는 예외적으로만 쓴다.
static 멤버
공유 상태 위험 초기화 순서, 동시 접근, 테스트 격리가 함께 문제가 된다.
가능하면 의존성 주입으로 넘긴다.

파생 값 · const 누락 · 공유 상태 점검

파생 값 멤버로 저장한 값이 다른 값과 불일치할 수 있다면 계산 함수가 낫다.
const 누락 읽기 전용 함수에 const가 없어 const 객체에서 호출하지 못하는지 확인한다.
공유 상태 static 데이터가 테스트 순서나 스레드 실행 순서에 의존하지 않는가.

읽기와 변경 분리

class Buffer {
public:
    std::size_t size() const { return data_.size(); }
    void append(std::string_view chunk) { data_ += chunk; }
private:
    std::string data_;
};