열거형 클래스 정의하기
열거형 클래스
enumeration
블록을 클래스 정의에 추가하여 열거형 클래스를 생성할 수 있습니다. 예를 들어, WeekDays
클래스는 요일 집합을 열거합니다.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
다음 섹션에서 MATLAB® 코드를 실행할 수 있도록 WeekDays
클래스 정의를 경로에 있는 .m
파일에 배치하십시오.
열거형 멤버 생성하기
클래스 이름과 멤버 이름을 사용하여 열거형 멤버를 참조합니다.
ClassName.MemberName
예를 들어, 열거형 멤버 WeekDays.Tuesday
를 변수 today
에 할당합니다.
today = WeekDays.Tuesday;
today
는 WeekDays
클래스의 변수입니다.
whos
Name Size Bytes Class Attributes today 1x1 104 WeekDays
today
today = Tuesday
슈퍼클래스 값으로 변환하기
열거형 클래스가 슈퍼클래스를 지정하는 경우 열거형 객체를 슈퍼클래스 생성자에 전달하여 슈퍼클래스로 변환할 수 있습니다. 이때 슈퍼클래스 생성자는 자기 자신의 클래스를 입력값으로 받고 슈퍼클래스의 인스턴스를 반환할 수 있어야 합니다. MATLAB에 내장된 숫자형 클래스(예: uint32
)는 이러한 변환을 허용합니다.
예를 들어, Bearing
클래스가 uint32
내장 클래스에서 파생된다고 가정하겠습니다.
classdef Bearing < uint32 enumeration North (0) East (90) South (180) West (270) end end
Bearing.East
멤버를 변수 a
에 할당합니다.
a = Bearing.East;
a
를 슈퍼클래스 생성자에 전달하고 uint32
형 값을 반환합니다.
b = uint32(a); whos
Name Size Bytes Class Attributes a 1x1 4 Bearing b 1x1 4 uint32
uint32
생성자는 서브클래스 Bearing
의 객체를 받아 uint32
형 클래스의 객체를 반환합니다.
열거형 클래스에 메서드 정의하기
여느 MATLAB 클래스와 마찬가지로 열거형 클래스에 메서드를 정의할 수 있습니다. 예를 들어, WeekDays
열거형 클래스에 대해 isMeetingDay
라는 메서드를 정의해 보겠습니다. 사용 사례는 사용자에게 화요일마다 반복되는 회의가 있는 경우입니다. 이 메서드는 입력 인수가 WeekDays
멤버 Tuesday
의 인스턴스인지 확인합니다.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end methods function tf = isMeetingDay(obj) tf = WeekDays.Tuesday == obj; end end end
WeekDays
클래스의 인스턴스를 사용하여 isMeetingDay
를 호출합니다.
today = WeekDays.Tuesday; today.isMeetingDay
ans = 1
메서드에 열거형 멤버를 직접 입력값으로 사용할 수도 있습니다.
isMeetingDay(WeekDays.Wednesday)
ans = 0
열거형 클래스에 속성 정의하기
열거형 멤버와 관련된 데이터를 저장해야 하는 경우 열거형 클래스에 속성을 추가합니다. 클래스 생성자에 속성값을 설정합니다. 예를 들어, SyntaxColors
클래스는 세 개의 속성을 정의합니다. 클래스 생성자는 클래스 멤버를 참조할 때 입력 인수의 값을 대응하는 속성에 할당합니다.
classdef SyntaxColors properties R G B end methods function c = SyntaxColors(r, g, b) c.R = r; c.G = g; c.B = b; end end enumeration Error (1, 0, 0) Comment (0, 1, 0) Keyword (0, 0, 1) String (1, 0, 1) end end
열거형 멤버를 참조하면 생성자가 속성값을 초기화합니다.
e = SyntaxColors.Error; e.R
ans = 1
SyntaxColors
가 값 클래스(handle
에서 파생되지 않음)이기 때문에 클래스 생성자만 속성값을 설정할 수 있습니다.
e.R = 0
You cannot set the read-only property 'R' of SyntaxColors.
속성을 정의하는 열거형 클래스에 대한 자세한 내용은 Mutable Handle vs. Immutable Value Enumeration Members 항목을 참조하십시오.
시퀀스를 호출하는 열거형 클래스 생성자
enumeration 블록의 각 명령문은 열거형 멤버의 이름이며, 선택적으로 인수 목록이 그 다음에 올 수 있습니다. 열거형 클래스가 생성자를 정의하는 경우 MATLAB이 생성자를 호출하여 열거형 인스턴스를 생성합니다.
MATLAB은 생성자를 명시적으로 정의하지 않는 모든 열거형 클래스에 대해 디폴트 생성자를 제공합니다. 디폴트 생성자는 다음과 같이 열거형 클래스의 인스턴스를 생성합니다.
열거형 멤버가 입력 인수를 정의하지 않는 경우 입력 인수를 사용하지 않음
입력 인수가 해당 멤버에 대한 열거형 클래스에 정의된 경우 입력 인수를 사용함
예를 들어, Bool
클래스에 대한 입력 인수는 Bool.No
의 경우 0
이고, Bool.Yes
의 경우 1
입니다.
classdef Bool < logical enumeration No (0) Yes (1) end end
디폴트 생성자가 첫 번째 슈퍼클래스에 인수를 전달하기 때문에 0
및 1
값은 logical
클래스입니다. 즉, 다음 명령문을 실행하면
n = Bool.No;
logical
이 호출되며, 이는 생성자의 다음 명령문과 일치합니다.
function obj = Bool(val) obj@logical(val) end
MATLAB은 첫 번째 슈퍼클래스에만 멤버 인수를 전달합니다. 예를 들어, 다른 클래스에서 파생된 Bool
이 있다고 가정하겠습니다.
classdef Bool < logical & MyBool enumeration No (0) Yes (1) end end
MyBool
클래스는 특화된 동작을 추가할 수 있습니다.
classdef MyBool methods function boolValues = testBools(obj) ... end end end
디폴트 Bool
생성자는 아래 함수와 같이 정의된 것처럼 동작합니다.
첫 번째 슈퍼클래스 생성자에 인수가 전달됨
그다음 생성자에 인수가 전달되지 않음
function obj = Bool(val) obj@logical(val) obj@MyBool end