Found an issue with the book? Report it on Github.

레코드 정의(Record Definitions)

레코드 정의(Record Definitions)

앞에서 model 정의라는 내용을 소개했습니다. 아직 까지는 본 것이 없겠지만, 모델리카에는 record 자료형도 포함되어 있습니다. recordmodel 과 마찬가지로 변수를 가질 수 있지만 방정식을 포함할 수는 없습니다. 레코드는 주로 데이터를 함께 그룹화하는 데 사용합니다. 그러나 곧 보게 되겠지만 주석(Annotations) 에서 다루는 것 처럼 관련된 데이터를 설명하는 데에도 매우 유용합니다.

문법(Syntax)

record 정의는 본질적으로 model 정의와 비슷하지만 방정식이 없습니다.

record RecordName "Description of the record"
  // Declarations for record variables
end RecordName;

model 과 마찬가지로 정의는 정의되는 레코드의 이름으로 시작하고 끝나며, record 에 대한 설명은 이름 뒤에 문자열로 포함될 수 있습니다. 레코드와 관련된 모든 변수는 record 정의 내에서 선언됩니다.

다음은 record 정의의 모든 예입니다.

record Vector "A vector in 3D space"
  Real x;
  Real y;
  Real z;
end Vector;

record Complex "Representation of a complex number"
  Real re "Real component";
  Real im "Imaginary component";
end Complex;

레코드 생성(Record Constructors)

이제 record 를 정의하는 방법을 알았으니 레코드를 생성하는 방법을 알아야 합니다. record 가 되는 변수를 선언하는 경우 선언 자체가 record 의 인스턴스를 생성하고 수정을 사용하여 레코드 내부의 변수 값을 지정할 수 있습니다.

parameter Vector v(x=1.0, y=2.0, z=0.0);

그러나 변수가 아닌 record 의 인스턴스를 생성하려는 경우가 있습니다.(예:, 수식에서 사용하기 위해 함수에 인수로 전달하거나 수정에 사용).각 record 정의에 대해 record동일한 이름 으로 함수가 자동으로 생성됩니다. 이 기능을 "레코드 생성자"라고 합니다. 레코드 생성자는 record 정의 내부의 변수와 일치하는 입력 인수를 가지며 해당 record 의 인스턴스를 반환합니다. 따라서 위의 Vector 정의의 경우 다음과 같이 레코드 생성자를 사용하여 parameter 를 초기화할 수도 있습니다.

parameter Vector v = Vector(x=1.0, y=2.0, z=0.0);

이 경우 v 값은 레코드 생성자에 대한 호출인 표현(expression) Vector(x=1.0, y=2.0, z=0.0) 에서 나옵니다.