객체의 유효한 상태를 메서드와 property로 보호합니다.
property는 메서드를 속성처럼 읽고 쓰게 하면서 검증이나 계산을 넣습니다. 밑줄 하나로 시작하는 이름은 클래스 내부용이라는 관례이며 완전한 보안 장벽은 아닙니다.
예제에서 @property def progress(self): 부분부터 찾으세요. 값을 만드는 표현식과 그 값을 다음 문장으로 넘기는 흐름을 한 줄씩 따라가면 실행 결과를 스스로 설명할 수 있습니다.
setter가 필요하지 않은 계산 속성은 읽기 전용으로 두고 상태 변경은 의미 있는 메서드를 통해 수행하면 불가능한 상태를 막기 쉽습니다.
객체가 항상 지켜야 하는 불변 조건은 생성자와 모든 변경 경로에서 확인하고 실패하면 즉시 예외를 발생시킵니다.
이 코드는 브라우저의 실제 Python에서 실행됩니다. 먼저 현재 결과를 확인한 뒤 complete가 전체 강의 수를 넘지 않도록 메서드를 추가하세요.
모든 속성에 기계적으로 getter와 setter를 만들면 Python의 단순한 속성 접근 장점을 잃습니다.
직접 바꿔보세요complete가 전체 강의 수를 넘지 않도록 메서드를 추가하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.