matlab.mixin.Heterogeneous 클래스
네임스페이스: matlab.mixin
이종 배열(Heterogeneous Array) 구성을 위한 슈퍼클래스
설명
matlab.mixin.Heterogeneous
는 이종 배열의 구성을 지원하는 추상 클래스입니다. 이종 배열이란, 객체들의 특정 클래스는 다르지만 동일한 루트 클래스에서 파생되거나 동일한 루트 클래스의 인스턴스인 객체들의 배열입니다. 루트 클래스는 matlab.mixin.Heterogeneous
에서 직접 파생됩니다.
메서드
보호 메서드
matlab.mixin.Heterogeneous.getDefaultScalarElement | 이종 배열 연산에 대한 디폴트 객체 반환 |
세부 정보
이종 계층 구조
인스턴스를 결합하여 이종 배열로 만들 수 있는 클래스의 계층 구조를 정의하려면 matlab.mixin.Heterogeneous
를 사용합니다.
다음 클래스 정의를 사용하면 HierarchyRoot
에서 파생된 클래스의 인스턴스를 결합하는 이종 배열을 구성할 수 있습니다.
classdef HierarchyRoot < matlab.mixin.Heterogeneous % HierarchyRoot is a direct subclass of matlab.mixin.Heterogeneous. % HierarchyRoot is the root of this heterogeneous hierarchy. end
matlab.mixin.Heterogeneous
에서 HierarchyRoot
클래스를 직접 파생시키면 HierarchyRoot
클래스가 클래스 계층 구조의 루트가 될 수 있습니다. 이 계층 구조 멤버들의 인스턴스를 결합하여 이종 배열을 구성할 수 있습니다. 동일한 루트 클래스에서 파생된 인스턴스만 결합되어 유효한 이종 배열을 구성할 수 있습니다.
이종 배열의 클래스
이종 배열의 클래스는 계층 구조 상에서 배열의 모든 객체가 공통적으로 속하는 가장 구체적인 슈퍼클래스가 됩니다. 예를 들어, 다음과 같은 클래스 계층 구조를 정의한다고 가정하겠습니다.
LeafA
의 인스턴스와 LeafB
의 인스턴스로 이루어진 배열을 구성하면 Middle
클래스의 배열이 생성됩니다.
harray = [LeafA LeafB]; class(harray)
ans = Middle
LeafC
의 인스턴스와 LeafD
의 인스턴스로 이루어진 배열을 구성하면 HierarchyRoot
클래스의 배열이 생성됩니다.
harray = [LeafC LeafD]; class(harray)
ans = HierarchyRoot
LeafA
의 인스턴스와 LeafA
의 또 다른 인스턴스로 이루어진 배열을 구성하면 LeafA
클래스의 동종 배열이 생성됩니다.
harray = [LeafA LeafA]; class(harray)
ans = LeafA
동일한 계층 구조 루트(예: 앞에 나와 있는 계층 구조의 HierarchyRoot
클래스)에서 파생된 객체만 사용하여 이종 배열을 구성할 수 있습니다.
여러 슈퍼클래스에서 파생된 객체를 사용하여 이종 배열을 구성할 수 있습니다. 단, 계층 구조에서 하나의 브랜치만 이종 루트를 정의할 수 있습니다.
이종 배열은 이종 계층 구조에서 두 개 이상의 클래스 인스턴스를 갖는 배열을 생성하는 연산의 결과물입니다. 일반적으로 이 연산은 결합 또는 인덱스 참조 값 할당입니다. 예를 들어, 다음과 같은 명령문은 인덱스 참조 값 할당을 사용하여 이종 배열을 구성합니다.
harray(1) = LeafA; harray(2) = LeafC; class(harray)
ans = Middle
matlab.mixin.Heterogeneous
에서 파생된 객체를 포함하는 배열에 새 객체를 할당하면 배열의 클래스가 변경될 수 있습니다. 예를 들어, LeafA
클래스의 객체만 포함하는 동종 배열이 있다고 가정하겠습니다.
harray = [LeafA,LeafA,LeafA]; class(harray)
ans = LeafA
동일한 루트에서 파생된 다른 클래스의 객체를 동종 배열에 추가하면 배열의 클래스가 가장 구체적인 슈퍼클래스로 변환됩니다.
harray(4) = LeafB; class(harray)
ans = Middle
메서드 디스패치
MATLAB®이 상위(Dominant) 인수가 이종 배열인 메서드를 불러올 때 메서드는 다음을 충족해야 합니다.
배열의 클래스에 의해 직접 정의되거나 슈퍼클래스에서 상속되는 방법으로 이종 배열의 클래스에 정의되어야 함.
메서드는
Sealed = true
여야 함(즉, 서브클래스에 의해 재정의될 수 없음). 상속된 메서드를 봉인해야 하는 경우 "상속된 메서드 봉인(Seal)" 항목을 참조하십시오.
이종 배열의 클래스는 동종 배열의 경우와 마찬가지로 특정 메서드를 호출할 때 어떤 클래스 메서드가 실행될지 결정합니다. MATLAB은 메서드를 디스패치할 때 배열에서 개별 요소의 클래스를 고려하지 않습니다.
이종 배열에서 호출되는 메서드는 Sealed = true
여야 한다는 요구사항은 모든 배열 요소의 정확하고 예측 가능한 동작을 보장합니다.
메서드가 Sealed = true
가 아니고 이종 배열에서 해당 메서드를 호출하려는 경우, 이종 계층 구조의 외부에서 상속된 메서드를 재정의해야 합니다.
예를 들어, matlab.mixin.Heterogeneous
외에 matlab.mixin.SetGet
을 서브클래스화하여 이종 배열을 정의한다고 가정하겠습니다. 클래스 설계에서 요구하는 방식으로 matlab.mixin.SetGet
슈퍼클래스를 호출하려면 set
메서드를 재정의하십시오.
classdef HeterogeneousSetGet < matlab.mixin.SetGet & matlab.mixin.Heterogeneous properties P end methods(Sealed) function varargout = set(obj,varargin) [varargout{1:nargout}] = set@matlab.mixin.SetGet(obj,varargin{:}); end end end
메서드의 구현은 이종 배열 harray
와 스칼라 인덱스 n
이 주어졌을 때 다음 표현식은
harray(n)
이종 배열이 아니라는 사실을 활용할 수 있습니다. 따라서 이종 배열의 단일 요소에서 메서드를 호출할 때에는 이종 배열에 대한 특별 요구 사항이 적용되지 않습니다.
디폴트 객체 정의
MATLAB에서 이종 배열은 배열 요소가 누락된 채로 생성될 수 있습니다. 예를 들면 다음과 같습니다.
인덱스 참조 값 할당으로 인해 간격이 있는 배열이 생성되는 경우. 예를 들어,
harray
가 이전에 정의되지 않았을 때 다음과 같은 경우입니다.harray(5) = LeafA;
MAT 파일에서 이종 배열을 불러오지만, MATLAB이 특정 객체의 클래스 정의를 찾을 수 없는 경우.
이런 경우 matlab.mixin.Heterogeneous
클래스는 getDefaultScalarElement
메서드를 호출하여 간격을 채울 디폴트 객체를 만듭니다. 이 메서드는 이종 계층 구조에서 matlab.mixin.Heterogeneous
의 직계 서브클래스인 루트 클래스의 인스턴스를 반환합니다.
루트 클래스가 추상 클래스이거나 이종 계층 구조의 클래스에 대한 적절한 디폴트 객체가 아니면, getDefaultScalarElement
메서드를 재정의하여 루트 클래스에서 파생된 인스턴스를 반환하도록 할 수 있습니다.
getDefaultScalarElement
메서드 정의이종 계층 구조의 루트 클래스에서 getDefaultScalarElement
를 호출하는 matlab.mixin.Heterogeneous
메서드를 재정의하여 디폴트 객체의 클래스를 지정합니다. getDefaultScalarElement
는 루트 클래스에서만 재정의할 수 있습니다.
getDefaultScalarElement
메서드의 시그니처는 다음과 같습니다.
methods (Static,Sealed,Access = protected) function defaultObject = getDefaultScalarElement ... end end
getDefaultScalarElement
메서드는 다음 조건을 충족해야 합니다.
정적(Static) — MATLAB은 이 메서드를 객체 없이 호출합니다.
보호됨(Protected) — MATLAB은 이 메서드를 호출하지만, 객체 사용자는 이 메서드를 호출하지 않습니다.
봉인(Sealed) (필수 아님) — 이종 계층 구조의 사용자가 클래스의 의도된 동작을 변경하지 않도록 하기 위해 이 메서드를 봉인(Seal)합니다.
스칼라 객체를 반환해야 합니다
반환된 값이 루트 클래스의
isa
테스트를 통과할 수 있어야 합니다.(isa(getDefaultScalarElement,'HierarchyRoot')
여기서
HierarchyRoot
는 이종 계층 구조 루트 클래스의 이름입니다. 이것은 디폴트 객체가 루트 클래스에서 파생된 모든 클래스의 인스턴트가 될 수 있다는 것을 의미합니다.
인덱싱 또는 결합(Concatenate) 재정의 불가
이종 배열을 사용하려면 일관된 인덱싱과 결합 동작이 필요합니다. 따라서 matlab.mixin.Heterogeneous
의 서브클래스는 디폴트로 지정된 인덱스 참조, 인덱스 참조 값 할당 또는 결합 동작을 변경할 수 없습니다.
서브클래스에서 다음 메서드를 재정의할 수 없습니다.
cat
horzcat
vertcat
subsref
subsasgn
서브클래스가 matlab.mixin.Heterogeneous
뿐만 아니라 슈퍼클래스에서도 상속하는 다중 상속을 포함한 경우, 슈퍼클래스는 이러한 메서드를 정의할 수 없습니다.
다음 형식의 명령문은
a = [obj1 obj2 ...];
괄호 안에 나열된 객체를 포함하는 배열 a
를 만듭니다.
동일한 특정 클래스의 Heterogeneous
객체를 결합하면 객체의 클래스가 유지되고 이종 배열이 구성되지 않습니다.
동일한 루트 슈퍼클래스에서 파생되었지만 구체적인 클래스는 다른 Heterogeneous
객체를 결합하면 이종 배열이 구성됩니다. MATLAB은 모두가 동일한 루트 계층 구조의 일부인 경우에는 그 어떤 배열 멤버의 클래스도 변환하려 시도하지 않습니다.
다음 형식의 명령문은
a(m:n) = [objm ... objn];
우변의 객체를 대입식의 좌변에 지정된 배열 요소(m:n
)에 할당합니다.
이종 배열에 대한 인덱스 참조 값 할당으로 다음이 가능합니다.
배열의 크기 증가 또는 축소.
기존 배열 요소 덮어쓰기.
배열 내 객체의 속성값 변경.
배열의 클래스 변경.
배열이 이종 배열인지 여부 변경.
다음 형식의 명령문은
a = harray(m:n);
인덱스 m:n
에서 참조된 harray
의 요소를 배열 a
에 할당합니다.
이종 배열의 인덱스 참조는 원래 배열의 하위 범위를 반환합니다. 이 하위 범위(m:n
) 내의 특정 요소에 따라 결과는 원래 배열과 다른 클래스를 가질 수 있으며 이종이 아닐 수 있습니다.
멤버가 아닌 객체 변환
동일한 루트 클래스에서 파생되지 않은 객체로 이종 배열을 구성하려 시도할 경우, MATLAB은 convertObject
메서드가 (존재할 경우) 객체를 우위 클래스로 변환하기 위해 이 메서드를 호출합니다. convertObject
메서드를 구현하면 이종 계층 구조의 일부가 아닌 객체를 포함한 이종 배열을 구성할 수 있습니다.
두 클래스 A
와 B
를 가정해 보겠습니다. 여기서 B
는 matlab.mixin.Heterogeneous
에서 파생되지 않았거나, A
와 B
는 matlab.mixin.Heterogeneous
에서 파생된 서로 다른 루트 클래스에서 파생되었습니다.
MATLAB은 다음과 같은 경우에 A
의 루트 클래스에 의해 구현된 convertObject
메서드를 호출하려 시도합니다.
인덱스 참조 값 할당
A(k) = B
가로 및 세로 결합
[A B] and [A;B]
[A,B] and [A;B]
클래스가 이종 계층 구조에서 정의되지 않은 객체의 변환을 지원하려면 convertObject
메서드를 구현합니다. 클래스 설계 상 이러한 번환이 필요하지 않는 경우에는 이 메서드를 구현할 필요가 없습니다.
이종 계층 구조의 루트 클래스만 convertObject
메서드를 구현할 수 있습니다.
convertObject
메서드는 다음과 같은 시그니처를 가져야 합니다.
methods (Static, Sealed, Access = protected) function cobj = convertObject(DomClass,objToConvert) ... end end
인덱스 참조 값 할당 A(k) = B
및 결합 [A B]
의 경우:
DomClass
는 배열A
의 클래스 이름입니다.objToConvert
는 변환될 객체(이 경우B
)입니다.cobj
는A
가 속하는 이종 계층 구조의 올바른 멤버입니다.
convertObject
가 A
클래스가 속한 계층 구조에 없는 객체를 반환하는 경우 MATLAB은 오류를 발생시킵니다.
핸들 호환성
matlab.mixin.Heterogeneous
클래스는 핸들 호환성을 지닙니다. 이 클래스는 여러 개의 슈퍼클래스를 사용하여 서브클래스를 정의할 때 핸들 또는 값 클래스와 결합될 수 있습니다. 핸들 호환성에 대한 자세한 내용은 Handle Compatible Classes 항목을 참조하십시오.
matlab.mixin.Heterogeneous
클래스는 값 클래스입니다. 값 클래스가 복사 작업에 미치는 영향에 대한 내용은 MATLAB 프로그래밍 기초 문서에서 객체 복사 항목을 참조하십시오.
버전 내역
R2011a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)