Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

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

내장 데이터형(예: 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)의 객체는 prop17을 갖습니다. 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

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

관련 항목