서브클래스 생성자 설계하기
슈퍼클래스 생성자를 명시적으로 호출하기
서브클래스 생성자에서 각 슈퍼클래스 생성자를 명시적으로 호출하면 다음과 같은 작업을 수행할 수 있습니다.
인수를 슈퍼클래스 생성자에 전달
MATLAB®이 슈퍼클래스 생성자를 호출하는 순서 제어
서브클래스 생성자에서 슈퍼클래스 생성자를 명시적으로 호출하지 않으면 MATLAB이 이러한 생성자를 인수 없이 암시적으로 호출합니다. 슈퍼클래스 생성자는 암시적인 호출을 지원할 수 있도록 인수가 없는 구문을 지원해야 하며 생성자는 클래스 블록의 맨 위에 나타나는 순서대로 왼쪽에서 오른쪽으로 호출됩니다. MATLAB이 생성자를 호출하는 순서를 변경하거나 인수를 가진 생성자를 호출하려면 서브클래스 생성자에서 슈퍼클래스 생성자를 명시적으로 호출하십시오.
서브클래스 생성자를 정의하지 않는 경우 슈퍼클래스 인수를 사용하여 디폴트 생성자를 호출할 수 있습니다. 자세한 내용은 디폴트 생성자 항목과 상속된 생성자에 대한 암시적인 호출 항목을 참조하십시오.
서브클래스에서 슈퍼클래스 생성자 호출하기
서브클래스 생성자 내에서 각 슈퍼클래스에 대한 생성자를 호출하려면 다음 구문을 사용하십시오.
obj@SuperClass1(args,...);
...
obj@SuperclassN(args,...);
여기서 obj
는 서브클래스 생성자의 출력값이고, SuperClass...
는 슈퍼클래스의 이름이며, args
는 해당 슈퍼클래스 생성자에 필요한 인수입니다.
예를 들어, 클래스 정의의 다음 부분은 Assets
라는 클래스의 서브클래스인 Stocks
라는 클래스를 보여줍니다.
classdef Stocks < Assets methods function s = Stocks(asset_args,...) if nargin == 0 % Assign values to asset_args end % Call asset constructor s@Assets(asset_args); ... end end end
서브클래스 생성자에 서브클래스 생성자 메서드를 생성하는 방법에 대한 자세한 내용이 나와 있습니다.
패키지에 포함된 슈퍼클래스 참조하기
슈퍼클래스가 패키지에 포함된 경우 패키지 이름을 포함시켜야 합니다. 예를 들어, Assests
클래스가 finance
패키지에 있는 경우 다음과 같이 하십시오.
classdef Stocks < finance.Assets methods function s = Stocks(asset_args,...) if nargin == 0 ... end % Call asset constructor s@finance.Assets(asset_args); ... end end end
여러 슈퍼클래스를 사용하여 객체 초기화하기
여러 슈퍼클래스에서 클래스를 파생하려면 각 슈퍼클래스 생성자에 대한 호출을 사용하여 서브클래스 객체를 초기화해야 합니다.
classdef Stocks < finance.Assets & Taxable methods function s = Stocks(asset_args,tax_args,...) if nargin == 0 ... end % Call asset and member class constructors s@finance.Assets(asset_args) s@Taxable(tax_args) ... end end end
서브클래스 생성자 구현
클래스 생성자가 인수가 없는 구문을 지원하도록 하려면 슈퍼클래스 생성자를 호출하기 전에 디폴트 값을 입력 인수 변수에 할당해야 합니다. 슈퍼클래스 생성자에 대한 서브클래스의 호출을 조건화할 수 없습니다. 슈퍼클래스 생성자에 대한 호출을 조건부 코드 블록 외부에 두십시오.
예를 들어, Stocks
클래스 생성자는 if
문에서 인수가 없는 경우를 지원하는데, if
코드 블록 외부에서 슈퍼클래스 생성자를 호출합니다.
classdef Stocks < finance.Assets properties NumShares Symbol end methods function s = Stocks(description,numshares,symbol) if nargin == 0 description = ''; numshares = 0; symbol = ''; end s@finance.Assets(description); s.NumShares = numshares; s.Symbol = symbol; end end end
생성자에서 직속 슈퍼클래스만 호출하기
서브클래스 생성자에서는 직속 슈퍼클래스 생성자만 호출합니다. 예를 들어, B
클래스가 A
클래스에서 파생되고 C
클래스가 B
클래스에서 파생된다고 가정하겠습니다. C
클래스에 대한 생성자는 A
클래스에 대한 생성자를 호출하여 속성을 초기화할 수 없습니다. B
클래스는 A
클래스의 속성을 초기화해야 합니다.
다음 A
, B
, C
클래스 구현에서 각 클래스에서 이러한 관계를 설계하는 방법을 보여줍니다.
A
클래스는 속성 x
및 y
를 정의하지만 x
에만 값을 할당합니다.
classdef A properties x y end methods function obj = A(x) ... obj.x = x; end end end
B
클래스는 A
클래스에서 속성 x
및 y
를 상속합니다. B
클래스의 생성자는 A
클래스의 생성자를 호출하여 x
를 초기화한 후 값을 y
에 할당합니다.
classdef B < A methods function obj = B(x,y) ... obj@A(x); obj.y = y; end end end
C
클래스는 속성 x
및 y
에 대한 값을 받아 B
클래스의 생성자에 전달합니다. 그러면 이 생성자가 A
클래스의 생성자를 호출합니다.
classdef C < B methods function obj = C(x,y) ... obj@B(x,y); end end end