객체 내부 상태와 공개 API를 구분합니다.
private은 클래스 내부, package-private은 같은 패키지, protected는 패키지와 하위 클래스, public은 어디서나 접근할 수 있습니다. 필요한 최소 범위만 공개합니다.
completed 필드는 private이라 completeLesson을 거쳐야만 1씩 늘고, total에 도달하면 더 늘지 않습니다. 강의 3개 중 1개를 끝낸 상태라 rate()가 0.333...을 돌려주고, %.0f가 33.333...을 반올림해 33%가 출력됩니다. 다만 Progress가 Main 안에 중첩되어 있어서 같은 최상위 클래스 안의 main은 private 필드에도 직접 접근할 수 있습니다.
getter와 setter를 기계적으로 만들기보다 completeLesson처럼 도메인 의미가 있는 메서드가 유효성 규칙을 한곳에 모읍니다.
공개 API가 작을수록 내부 구현을 안전하게 바꾸기 쉽고 잘못된 상태를 만드는 경로도 줄어듭니다.
private은 보안 암호화가 아니라 컴파일 수준의 접근 규칙입니다.
직접 바꿔보세요진도가 전체 강의 수를 넘지 않게 구현하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.