클래스 불변이란 무엇입니까?
객체 지향 컴퓨터 프로그래밍 및 디자인에서 클래스 불변은 객체 인스턴스가 유효한 상태에 있는지 여부를 정의하는 데 사용할 수있는 일련의 규칙입니다. 설계 관점에서 클래스 불변은 객체 내 데이터가 적절한 기능적 상태로 간주되어야하는 경계 세트입니다. 클래스 불변은 디자인 문서 또는 소스 코드 주석에서 정의되거나 일부 프로그래밍 언어에서 실행 가능한 컴퓨터 코드로 직접 구현 될 수 있습니다. 코딩 된 불변량 및 어설 션을 사용하는 프로그램은 불변 조건이 충족되지 않으면 프로그램이 실행을 중단하거나 다양한 오류를 발생시킬 수 있습니다. 표준 오류 검사와 달리 클래스 불변량은 일반적으로 클래스의 내부 구현이 작동하는지 확인하기 위해 사용되며 일반적으로 공용 문서 또는 프로그래밍 인터페이스에 나열되지 않습니다.
매우 기본적인 수준에서 클래스 불변은 본질적으로 클래스에 대한 어설 션 모음입니다. 간단히 말해서 어설 션은 클래스 상태의 일부를 확인하는 명령문이며 프로그램 실행을 계속하려면 true로 평가해야합니다. 주장의 한 예는 주어진 정수가 항상 1과 10 사이인지 확인하는 진술입니다. 클래스 불변이 사용될 때, 주장은 객체가 보유한 데이터의 모든 관련 부분에 대해 평가되며, 본질적으로 모든 데이터의 유효성을 검증합니다. 개체가 정의 된 범위 내에 있습니다.
많은 경우, 클래스 불변 값을 사용하는 것은 변수가 사용 가능한 경계 내에 있거나 null이 아닌지 확인하기 위해 측정되는 표준 오류 검사와 매우 유사합니다. 그러나 클래스 불변량 사용과 표준 오류 검사의 차이점은 코드에 본질적인 결함이없는 한 발생하지 않아야하는 오류를 포착하기 위해 불변 값 및 어설 션이 주로 사용된다는 것입니다. 또 다른 차이점은 표준 오류 검사에는 프로그램 제어 흐름의 복구 및 변경이 수반되는 반면, 불변 오류의 결과는 프로그램 종료 여야한다는 것입니다. 클래스 불변 검사가 실패 할 때 대부분의 프로그램이 종료되는 이유는 객체가 손상된 상태에 있고 디자인 뷰에서 디자인 계약을 준수하는 데 필요한 사전 조건 및 사후 조건을 충족 할 수 없기 때문입니다.
암시 적으로 정의 된 객체 지향 프로그래밍 언어에서 변하지 않는 클래스의 속성 중 하나는 변하지 않는 것이 모든 서브 클래스에 의해 상속되는 메커니즘이라는 것입니다. 이로 인해 서브 클래스가 상위 클래스에서 수행되는 모든 불변 검사를 대체하지 못합니다. 궁극적으로 이는 서브 클래스가 수퍼 클래스가 설정 한 설계 계약을 위반할 수 없으므로 예상치 못한 결과 나 찾기 어려운 프로그램 오류가 발생할 수 있음을 의미합니다.