Main Content

객체 배열을 만들고 초기화하기

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)

prop11.618을 할당하여 SimpleValue의 인스턴스 phi를 만듭니다. Likephi와 함께 사용하여 이 클래스의 2×2 객체 배열을 만듭니다. 반환되는 배열 Lphi와 클래스가 동일합니다.

phi = SimpleValue(1.618);
L = createArray(2,2,Like=phi)
L = 

  2×2 SimpleValue array with properties:

    prop1

createArrayLike와 함께 사용하면 프로토타입의 복사본을 사용하여 배열을 채우지 않기 때문에 phi의 속성값이 보존되지 않습니다. L의 요소는 해당 프로토타입의 클래스의 디폴트 생성자를 한 번 호출한 결과의 복사본이기 때문에 이들 요소의 prop1은 디폴트 값을 가집니다.

[L.prop1]
ans =

     0     0     0     0

FillValue 인수

디폴트 값이 아닌 객체로 구성된 배열을 만들려면, 생성자에 입력 인수를 사용하여 인스턴스를 만든 다음 이를 createArray의 채우기 값으로 사용하십시오.

X = createArray(dims,FillValue=instance)

prop17을 할당하여 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)의 객체는 prop17을 갖습니다. 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

생성자의 이 패턴은 인수가 없는 옵션이 포함되어 있는 한 값 객체와 핸들 객체 모두에 사용할 수 있습니다.

관련 항목