Main Content

이 페이지의 내용은 이전 릴리스에 관한 것입니다. 해당 영문 페이지는 최신 릴리스에서 제거되었습니다.

핸들 객체로 구성된 배열 초기화하기

핸들 객체로 구성된 배열을 초기화할 경우 MATLAB®은 배열의 빈 요소를 디폴트 객체로 채웁니다. 디폴트 객체를 만들기 위해 MATLAB은 다음 작업을 수행합니다.

  • 클래스 생성자를 한 번 호출하여 객체를 가져옵니다.

  • 배열의 각 요소에 대한 고유한 핸들을 생성합니다.

  • 다시 생성자를 호출하지 않고, 생성된 디폴트 객체에서 속성값을 복사합니다.

InitHandleArray 클래스는 이 동작을 보여줍니다.

classdef InitHandleArray < handle
   properties
      RandNumb
   end
   methods
      function obj = InitHandleArray
         obj.RandNumb = randi(100);
      end
   end
end

속성 RandNumb에는 InitHandleArray 생성자가 할당한 난수가 포함되어 있습니다.

배열의 마지막 요소에 할당하여 생성된 배열을 MATLAB이 초기화하면 어떤 일이 발생하는지 고려합니다. 마지막 요소는 가장 높은 인덱스 값을 갖는 요소입니다. 요소 A(4,5)에 할당된 InitHandleArray 객체의 RandNumb 속성값이 59라고 가정해 보겠습니다.

A(4,5) = InitHandleArray;
A(4,5).RandNumb
ans =

     59

인덱스 위치 A(4,5)에 있는 요소는 InitHandleArray 클래스의 인스턴스입니다. 요소 A(1,1)에 사용된 디폴트 객체도 InitHandleArray 클래스의 인스턴스이지만, RandNumb 속성이 다른 난수로 설정되어 있습니다.

앞에 있는 배열 요소를 채우기 위해 MATLAB은 클래스 생성자를 호출하여 단일 객체를 만듭니다. MATLAB은 그 객체를 남아 있는 모든 배열 요소에 복사합니다. 생성자를 호출하여 디폴트 객체를 만들면 randi 함수가 한 번 더 호출되어 새로운 난수가 반환됩니다.

A(1,1).RandNumb
ans =

     10

MATLAB은 이 두 번째 인스턴스를 남아 있는 모든 배열 요소에 복사합니다.

A(2,2).RandNumb
ans =

     10
A(2,3).RandNumb
ans =

    10

객체 배열을 초기화할 때 MATLAB은 단일 객체의 복사본을 배열의 빈 요소에 할당합니다. MATLAB은 사용자가 각 객체에 서로 다른 속성값을 할당할 수 있도록 각 객체에 고유한 핸들을 제공합니다. 객체는 동일하지 않습니다.

A(1,1) == A(2,2)
ans =

     0

즉, 핸들 A(1,1)A(2,2)와 동일한 객체를 참조하지 않습니다. 다음과 같은 명령문을 사용하여 배열을 생성하면

A(4,5) = InitHandleArray;

클래스 생성자가 두 번 호출됩니다. 첫 번째 호출에서는 배열 요소 A(4,5)에 대한 객체가 생성됩니다. 두 번째 호출에서는 디폴트 객체가 생성되고 MATLAB이 이 디폴트 객체를 남아 있는 모든 빈 배열 요소에 복사합니다.

관련 정보

배열 조작에 대한 자세한 내용은 다차원 배열 항목을 참조하십시오.

값을 속성에 할당하는 방법에 대한 자세한 내용은 객체를 디폴트 속성값으로 처리하기 항목을 참조하십시오.

클래스에 대한 subsasgn 메서드를 구현하는 방법에 대한 자세한 내용은 객체 인덱싱 사용자 지정하기 항목을 참조하십시오.