이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
객체 배열을 만들고 초기화하기
내장 데이터형(예: double
형, string
형)과 유사한 인덱싱 동작을 갖는 클래스 기반 객체로 구성된 배열을 만들 수 있습니다. 그러나 객체 배열을 만들려면 객체가 생성되는 방식에 특별한 주의가 필요합니다.
루프를 사용하여 객체 배열 만들기
초기값을 갖는 하나의 속성과 인수가 없는 디폴트 생성자를 갖는 SimpleValue
클래스를 정의합니다.
classdef SimpleValue properties prop1 = 0 end end
루프를 사용하여 SimpleValue
객체로 구성된 배열을 만듭니다.
for k = 1:5 objArray(k) = SimpleValue; end
배열 인덱싱을 사용하여 특정 객체의 속성값을 참조하고 할당할 수 있습니다. 예를 들어, objArray(1)
의 prop1
속성에 값 5
를 할당합니다.
objArray(1).prop1 = 5;
모든 객체에 대한 prop1
의 값을 반환하고 이 값을 벡터에 할당합니다.
p = [objArray.prop1]
p = 5 0 0 0 0
객체 배열의 속성과 메서드에 액세스하는 데 대한 자세한 내용은 Accessing Properties and Methods in Object Arrays 항목을 참조하십시오.
마지막 요소를 생성하여 객체 배열 만들기
SimpleValue
예제에서 objArray
의 객체는 인수가 없는 디폴트 생성자와 초기 속성값을 사용하여 루프 내에서 생성됩니다. 배열의 마지막 요소를 생성하여 SimpleValue
객체로 구성된 배열을 만들 수도 있습니다.
예를 들어, SimpleValue
객체로 구성된 2×2 배열을 만듭니다.
a(2,2) = SimpleValue
a = 2×2 SimpleValue array with properties: prop1
객체 배열을 이와 같은 방식으로 만드는 경우 MATLAB®은 클래스가 값인지 핸들인지에 따라 두 가지 접근 방식 중 하나를 사용하여 배열의 나머지 요소를 채웁니다.
값 클래스 배열
값 클래스 객체로 구성된 배열의 마지막 요소를 생성한 후 MATLAB은 다음을 수행합니다.
인수가 없는 생성자를 한 번 호출합니다.
해당 인스턴스의 복사본으로 나머지 요소를 채웁니다.
생성자에 대한 입력값을 사용하여 속성값을 초기화하려면 생성자에 인수가 없는 옵션도 있어야 합니다.
예를 들어, 입력값을 받아 이 입력값을 prop1
에 할당하는 생성자를 SimpleValue
에 추가합니다.
classdef SimpleValue properties prop1 = 0 end methods function obj = SimpleValue(v) if nargin > 0 obj.prop1 = v; end end end end
입력 인수 7
을 사용해서 b(5)
를 생성하여 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은 다음을 수행합니다.
배열의 각 요소에 대한 고유한 핸들을 생성합니다.
배열의 마지막 객체에서 속성값을 복사합니다.
생성자를 호출하지 않고 복사된 해당 값을 사용하여 배열의 나머지 부분에 대한 객체를 만듭니다.
값 클래스의 경우와 달리 MATLAB은 배열을 채우기 위해 생성자를 호출하지 않으므로 해당 배열의 모든 객체는 동일한 속성값으로 시작합니다. 예를 들어, 자신의 속성에 대해 난수를 생성하는 핸들 클래스를 정의합니다.
classdef InitHandleArray < handle properties RandNum end methods function obj = InitHandleArray obj.RandNum = randi(100); end end end
c(5)
를 생성하여 새 1×5 배열을 만들고 prop1
값을 확인합니다. 배열을 만들기 위해 MATLAB은 생성자를 두 번 호출합니다. 첫 번째로, MATLAB은 c(5).RandNum
에 값을 할당합니다. 두 번째로, 두 번째 호출의 결과를 randi
에 할당하여 c(1)
을 만듭니다. 마지막으로, 이 RandNum
값을 c
의 나머지 요소에 복사합니다.
c(5) = InitHandleArray; z = [c.RandNum]
z = 91 91 91 91 82
MATLAB은 핸들 클래스 배열을 만들기 위해 생성자에 인수가 없는 옵션이 필요하지 않지만, 여전히 모든 클래스 생성자에 인수가 없는 옵션을 사용할 것을 권장합니다.
생성자에서 객체 배열 만들기
클래스 생성자 자체를 사용하여 객체 배열을 만들고 반환할 수도 있습니다. 예를 들어, ObjectArray
클래스는 2차원 입력 배열 F
와 동일한 크기의 객체 배열을 생성합니다. 그런 다음 생성자는 각 객체의 Value
속성을 이에 대응하는 입력 배열 값으로 초기화합니다.
classdef ObjectArray properties Value end methods function obj = ObjectArray(F) if nargin ~= 0 m = size(F,1); n = size(F,2); p(m,n) = obj; for i = 1:m for j = 1:n p(i,j).Value = F(i,j); end end obj = p; end end end end
생성자의 이 패턴은 인수가 없는 옵션이 포함되어 있는 한 값 객체와 핸들 객체 모두에 사용할 수 있습니다.