객체 배열을 만들고 초기화하기
MATLAB®은 객체 배열을 만드는 여러 가지 방법을 제공합니다. 각 방법별로 배열에 포함된 객체가 생성되는 방식이 다릅니다. 최종 목표에 따라 배열 생성 방법을 선택하십시오.
루프를 사용하여 객체 배열 만들기 — 서로 다른 값으로 객체를 초기화해야 하는 경우 for 루프를 사용하여 배열을 만듭니다.
createArray (R2024a 이후)를 사용하여 객체 배열 만들기 — 동일한 초기값을 갖는 객체로 구성된 배열을 만들려면
createArray
(R2024a 이후)를 사용합니다.마지막 요소를 생성하여 객체 배열 만들기 — 배열의 요소를 하나만 생성하고 싶은 경우에 사용합니다. MATLAB이 마지막 요소의 클래스의 디폴트 객체 복사본을 사용하여 배열의 나머지 요소를 채웁니다.
루프를 사용하여 객체 배열 만들기
SimpleValue
클래스를 정의합니다. 이 클래스는 디폴트 값을 갖는 속성 하나와 인수 없이 호출 가능한 생성자를 가집니다.
classdef SimpleValue properties prop1 = 0 end methods function obj = SimpleValue(v) if nargin > 0 obj.prop1 = v; end end end end
루프를 사용하여 SimpleValue
객체로 구성된 배열을 만듭니다. 배열의 각 요소의 prop1
값을 서로 다른 값으로 설정합니다.
initValues = [3 -1 0 4 5]; for k = 1:5 objArray(k) = SimpleValue(initValues(k)); end
prop1
의 값이 initValues
로 설정되어 있는지 확인합니다.
p = [objArray.prop1]
p = 3 -1 0 4 5
객체 배열의 속성과 메서드에 액세스하는 데 대한 자세한 내용은 Accessing Properties and Methods in Object Arrays 항목을 참조하십시오.
createArray
(R2024a 이후)를 사용하여 객체 배열 만들기
createArray
를 사용하여 원하는 클래스의 객체 배열을 생성할 수도 있습니다. createArray
를 사용하면 배열의 크기뿐 아니라 원하는 조합의 클래스, 프로토타입, 채우기 값을 지정하여 객체 배열을 생성할 수 있습니다. 구문과 옵션에 대한 전체 설명을 보려면 createArray
항목을 참조하십시오.
classname
인수
classname
인수를 사용하여 배열의 클래스를 지정합니다.
X = createArray(dims,"classname")
루프를 사용하여 객체 배열 만들기에 따라 SimpleValue
클래스의 1×5 배열을 만듭니다. MATLAB은 인수 없이 생성자를 한 번 호출한 후 해당 인스턴스의 복사본으로 배열을 채웁니다.
X = createArray(1,5,"SimpleValue")
X = 1×5 SimpleValue array with properties: prop1
배열의 모든 요소에서 prop1
값은 이 클래스에 의해 정의된 디폴트 값입니다.
[X.prop1]
ans = 0 0 0 0 0
Like
인수
Like
이름-값 인수를 사용하여 기존 인스턴스나 배열을 프로토타입으로 지정하여 객체 배열을 만듭니다.
X = createArray(dims,Like=prototype)
prop1
에 1.618
을 할당하여 SimpleValue
의 인스턴스 phi
를 만듭니다. Like
를 phi
와 함께 사용하여 이 클래스의 2×2 객체 배열을 만듭니다. 반환되는 배열 L
은 phi
와 클래스가 동일합니다.
phi = SimpleValue(1.618); L = createArray(2,2,Like=phi)
L = 2×2 SimpleValue array with properties: prop1
createArray
를 Like
와 함께 사용하면 프로토타입의 복사본을 사용하여 배열을 채우지 않기 때문에 phi
의 속성값이 보존되지 않습니다. L
의 요소는 해당 프로토타입의 클래스의 디폴트 생성자를 한 번 호출한 결과의 복사본이기 때문에 이들 요소의 prop1
은 디폴트 값을 가집니다.
[L.prop1]
ans = 0 0 0 0
FillValue
인수
디폴트 값이 아닌 객체로 구성된 배열을 만들려면, 생성자에 입력 인수를 사용하여 인스턴스를 만든 다음 이를 createArray
의 채우기 값으로 사용하십시오.
X = createArray(dims,FillValue=instance)
prop1
에 7
을 할당하여 SimpleValue
의 인스턴스를 만든 다음 이 인스턴스를 FillValue
이름-값 인수와 함께 사용하여 3×1 배열을 만듭니다.
s = SimpleValue(7); F = createArray(3,1,FillValue=s)
F = 3×1 SimpleValue array with properties: prop1
classname
을 지정하는 경우와 달리 createArray
가 클래스 생성자를 호출하지 않습니다. 배열의 각 요소에 채우기 값이 복사됩니다. 각 인스턴스의 prop1
값이 7
인지 확인합니다.[F.prop1]
ans = 7 7 7
핸들 클래스
이전 섹션에서는 값 클래스를 다루었습니다. 핸들 클래스의 경우에는 createArray
가 배열의 각 요소에 대한 고유한 핸들을 생성합니다. 예를 들어, 클래스 속성에 대해 난수를 생성하는 생성자를 갖는 핸들 클래스를 정의합니다.
classdef InitHandleArray < handle properties Num end methods function obj = InitHandleArray(varargin) if nargin == 1 obj.Num = randi(varargin{1}); else obj.Num = -4; end end end end
createArray
를 사용하여 디폴트 InitHandleArray
객체로 구성된 2×2 배열을 반환합니다.
Y = createArray(2,2,"InitHandleArray")
Y = 2×2 InitHandleArray array with properties: Num
핸들 자체는 고유하지만, MATLAB은 생성자를 한 번만 호출하고 배열을 해당 인스턴스의 복사본으로 채웁니다. 속성 Num
의 값을 확인하여 인수가 없는 생성자가 호출되었는지 확인합니다.
[Y.Num]
ans = -4 -4 -4 -4
마지막 요소를 생성하여 객체 배열 만들기
루프를 사용하여 객체 배열 만들기의 SimpleValue
예제에서는 objArray
의 객체가 루프 내에서 생성되었습니다. 배열의 마지막 요소를 생성하여 SimpleValue
객체로 구성된 배열을 만들 수도 있습니다.
예를 들어, 배열의 마지막 요소를 생성하여 SimpleValue
객체로 구성된 2×2 배열을 만듭니다.
a(2,2) = SimpleValue
a = 2×2 SimpleValue array with properties: prop1
값 클래스 배열
값 클래스 객체로 구성된 배열의 마지막 요소를 생성한 후 MATLAB은 다음을 수행합니다.
인수가 없는 생성자를 호출합니다.
해당 인스턴스의 복사본으로 나머지 요소를 채웁니다.
입력 인수 7
을 지정해서 b(5)
를 생성하여 SimpleValue
로 구성된 1×5 배열을 만듭니다.
b(5) = SimpleValue(7);
모든 prop1
값을 반환하고 이 값을 벡터 y
에 할당합니다. b(5)
의 객체는 prop1
값 7
을 갖습니다. MATLAB은 인수가 없는 생성자를 한 번 호출하고 이 값을 남아 있는 모든 배열 요소에 복사합니다. 이들 요소의 디폴트 prop1
값은 0
입니다.
y = [b.prop1]
y = 0 0 0 0 7
SimpleValue
생성자가 인수 없는 호출을 처리할 수 없는 경우 b(1)
부터 b(4)
까지 채우려는 중 MATLAB에서 오류가 발생합니다.
핸들 클래스 배열
핸들 클래스 객체로 구성된 배열의 마지막 요소를 생성한 후 MATLAB은 다음을 수행합니다.
배열의 각 요소에 대한 고유한 핸들을 생성합니다.
인수가 없는 생성자를 호출합니다.
해당 인스턴스의 복사본으로 나머지 요소를 채웁니다.
입력 인수 3
을 지정해서 c(5)
를 생성하여 InitHandleArray
클래스로 구성된 1×5 배열을 만든 다음(핸들 클래스 참조) Num
값을 확인합니다. MATLAB은 생성자를 다시 한번 호출하여 이 호출 결과의 복사본을 c(1)
부터 c(4)
에 할당합니다.
c(5) = InitHandleArray(3); z = [c.Num]
z = -4 -4 -4 -4 3
생성자에서 객체 배열 만들기
클래스 생성자 자체를 사용하여 객체 배열을 만들고 반환할 수도 있습니다. 예를 들어, ObjectArray
클래스는 입력 배열 F
와 크기와 모양이 동일한 객체 배열을 생성합니다. 그런 다음 생성자는 각 객체의 Value
속성을 이에 대응하는 입력 배열 값으로 초기화합니다.
classdef ObjectArray properties Value end methods function obj = ObjectArray(F) if nargin ~= 0 n = numel(F); p(n) = obj; for i = 1:n p(i) = F(i); end obj = reshape(p,size(F)); end end end end
생성자의 이 패턴은 인수가 없는 옵션이 포함되어 있는 한 값 객체와 핸들 객체 모두에 사용할 수 있습니다.