이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
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는 이종 계층 구조 루트 클래스의 이름입니다. 이것은 디폴트 객체가 루트 클래스에서 파생된 모든 클래스의 인스턴트가 될 수 있다는 것을 의미합니다.
이종 배열을 사용하려면 일관된 인덱싱과 결합 동작이 필요합니다. 따라서 matlab.mixin.Heterogeneous의 서브클래스는 디폴트로 지정된 인덱스 참조, 인덱스 참조 값 할당 또는 결합 동작을 변경할 수 없습니다.
서브클래스에서 다음 메서드를 재정의할 수 없습니다.
cathorzcatvertcatsubsrefsubsasgn
서브클래스가 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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)