Main Content

열거형에 대한 연산

열거형에서 지원되는 연산

논리 연산, 집합의 원소인지 확인하는 연산, 문자열 비교 연산을 열거형에 사용할 수 있습니다. 이러한 연산은 조건문(예: switch 문 및 if 문)에서 열거형을 사용하는 기능도 지원합니다. string 함수와 char 함수를 사용하면 열거형 멤버를 string형과 char형 벡터로 변환할 수 있습니다.

열거형 클래스 예제

이 항목에서는 WeekDays 클래스를 사용하여 열거형에 대한 연산을 수행하는 방법을 보여줍니다. WeekDays 클래스는 요일을 열거하는 멤버를 정의합니다.

classdef WeekDays
   enumeration
      Monday, Tuesday, Wednesday, Thursday, Friday
   end
end

열거형을 정의하는 방법에 대한 자세한 내용은 열거형 클래스 정의하기 항목을 참조하십시오.

디폴트 메서드

열거형 클래스에는 다음과 같은 디폴트 메서드가 있습니다.

methods('WeekDays')
Methods for class WeekDays:

WeekDays   char       intersect  ne         setxor     strcmpi    strncmp    union      
cellstr    eq         ismember   setdiff    strcmp     string     strncmpi 

WeekDays 메서드는 텍스트 형식을 열거형으로 변환합니다. 지원되는 형식에는 string형, char형 벡터, string형 배열, char형 벡터로 구성된 셀형 배열이 포함됩니다. 예를 들면 다음과 같습니다.

f = WeekDays(["Monday" "Friday"])
f = 

  1×2 WeekDays enumeration array

    Monday    Friday

열거형 멤버를 string형 또는 char형 벡터로 변환하기

열거형 멤버를 string형과 char형 벡터로 변환하는 것은 열거형 멤버 이름을 포함하는 텍스트를 만드는 데 유용합니다. 예를 들어, string 함수를 사용하여 열거형 멤버를 string형으로 변환하고 변환된 string형을 문장에 포함합니다.

string(WeekDays.Monday) + " is our meeting day."
ans = 

    "Monday is our meeting day."

char 함수를 비슷한 방식으로 사용합니다.

['Today is ' char(WeekDays.Friday) '.']
ans =

    'Today is Friday.'

열거형 배열을 string형 배열이나 char형 벡터로 구성된 셀형 배열로 변환하기

string 함수를 사용하여 열거형 배열을 string형 배열로 변환합니다.

sa = [WeekDays.Tuesday WeekDays.Thursday];
string(sa)
ans = 

  1×2 string array

    "Tuesday"    "Thursday"

cellstr을 사용하여 열거형 배열을 char형 벡터로 구성된 셀형 배열로 변환할 수 있습니다.

ca = cellstr([WeekDays.Tuesday WeekDays.Thursday]);
class(ca)
ans =

    'cell'

셀형 배열에 포함된 두 셀 모두 char형 벡터를 포함합니다.

class([ca{1:2}])
ans =

    'char'

열거형, string형, char형 벡터를 사용하는 관계 연산

관계 연산자 eq(==), ne(~=) 및 isequal 메서드를 사용하여 열거형 인스턴스와 char형 벡터 및 string형을 비교할 수 있습니다.

관계 연산자 eqne

eqne를 사용하여 열거형 멤버와 텍스트 값을 비교합니다. 예를 들어, 다음과 같이 열거형 멤버와 string형을 비교할 수 있습니다.

today = WeekDays.Friday;
today == "Friday"
ans =

  logical

   1

열거형 배열과 char형 벡터를 비교합니다. 반환 값은 열거형 배열의 멤버 중 어느 것이 char형 벡터와 동일한지 나타내는 논리형 배열입니다.

wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
wd == 'Friday'
ans =

  1×3 logical array

   0   0   1

이 예제에서는 ne 함수를 사용하여 열거형 배열과 같은 길이의 string형 배열의 대응되는 요소를 비교합니다.

sa = ["Monday" "Wednesday" "Friday"];
md = [WeekDays.Tuesday WeekDays.Thursday WeekDays.Friday];
md ~= sa
ans =

  1×3 logical array

   1   1   0

char형 벡터 Wednesday는 열거형 멤버 WeekDays.Wednesday와 같습니다(==). 조건문에서 이 등식을 사용할 수 있습니다.

today = 'Wednesday';
   ...
if today == WeekDays.Wednesday
   disp('Team meeting at 2:00')
end

isequal 메서드

isequal 메서드를 사용하면 열거형 인스턴스와 string형, 문자형 벡터, string형 배열, 문자형 벡터로 구성된 셀형 배열도 비교할 수 있습니다.

a = WeekDays.Monday;
isequal(a,"Monday")
ans =

     logical

     1

열거형 배열과 단일 항목을 비교할 때 isequal의 동작은 eqne와 약간 다릅니다. isequal 메서드에서는 비교하는 두 값의 크기가 같아야 합니다. 따라서, isequal은 열거형 배열과 char형 벡터 또는 string형 스칼라를 비교하면 텍스트가 배열에 포함된 열거형 멤버 중 하나와 일치하더라도 false를 반환합니다.

wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
isequal(wd,"Friday")
ans =

     logical

     0

switch 문 내 열거형

등식(eq) 및 부등식(ne) 함수를 사용하여 switch 문에서 열거형 멤버를 사용할 수 있습니다. 예를 들어, 앞에서 정의한 WeekDays 열거형을 사용하여 switch 문을 생성한다고 가정하겠습니다.

function c = Reminder(day)
   % Add error checking here
   switch(day)
      case WeekDays.Monday
         c = 'No meetings';
      case WeekDays.Tuesday
         c = 'Department meeting at 10:00';
      case {WeekDays.Wednesday WeekDays.Friday}
         c = 'Team meeting at 2:00';
      case WeekDays.Thursday
         c = 'Volleyball night';
   end
end

WeekDays 열거형 클래스의 멤버를 Reminder 함수에 전달합니다.

today = WeekDays.Wednesday;
Reminder(today)
ans =

Team meeting at 2:00

자세한 내용은 Objects In Conditional Statements 항목을 참조하십시오.

string형 또는 char형 벡터 대체하기

string형 또는 char형 벡터를 사용하여 특정 열거형 멤버를 표현할 수 있습니다.

function c = Reminder2(day)
   switch(day)
      case 'Monday'
         c = 'Department meeting at 10:00';
      case 'Tuesday'
         c = 'Meeting Free Day!';
      case {'Wednesday' 'Friday'}
         c = 'Team meeting at 2:00';
      case 'Thursday'
         c = 'Volleyball night';
   end
end

열거형을 명시적으로 지정하지 않고 char형 벡터 또는 string형을 사용할 수도 있지만 MATLAB®은 텍스트 형식을 열거형으로 변환해야 합니다. 꼭 필요한 상황이 아니라면 이러한 변환이 수행되지 않도록 하십시오.

열거형이 집합의 원소인지 여부 확인

열거형 클래스는 집합의 원소인지 여부를 확인할 수 있는 메서드를 제공합니다.

  • ismember — 열거형 배열의 요소가 집합의 원소인 경우 true

  • setdiff — 열거형 배열에 대한 차집합

  • intersect — 열거형 배열에 대한 교집합

  • setxor — 열거형 배열에 대한 배타적 OR 연산

  • union — 열거형 배열에 대한 합집합

오늘이 팀 회의 날인지 확인한다고 가정하겠습니다. 팀이 회의를 갖는 날에 해당하는 열거형 멤버 집합을 생성합니다.

today = WeekDays.Tuesday;
teamMeetings = [WeekDays.Wednesday WeekDays.Friday];

ismember를 사용하여 todayteamMeetings 집합의 요소인지 여부를 확인할 수 있습니다.

ismember(today,teamMeetings)
ans = 
     0

열거형과 텍스트가 혼합된 집합

열거형 멤버와 텍스트 값을 모두 열거형 클래스 메서드에 전달하면 클래스가 텍스트 값을 열거형 클래스로 변환하려고 시도합니다.

char형 벡터 'Friday'가 열거형 배열의 멤버인지 여부를 확인합니다.

teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
ismember('Friday',teamMeetings)
ans =

  logical

   1

열거형 멤버가 string형 배열의 멤버인지 여부를 확인합니다.

ismember(WeekDays.Friday,["Wednesday" "Friday"])
ans =

  logical

   1

열거형의 텍스트 비교 메서드

열거형 클래스는 열거형 멤버를 텍스트와 비교하는 메서드를 제공합니다. 문자열 비교 메서드에 대한 인수 중 하나는 char형 벡터이거나 string형이어야 합니다. 두 열거형 멤버를 비교하면 false가 반환됩니다.

  • strcmp — 열거형 멤버 비교

  • strncmp — 열거형 멤버의 처음 n개 문자 비교

  • strcmpi — 열거형 멤버에 대한 대/소문자를 구분하지 않는 비교

  • strncmpi — 열거형 멤버의 처음 n개 문자에 대한 대/소문자를 구분하지 않는 비교

열거형 멤버를 string형 또는 char형 벡터와 비교하기

문자열 비교 메서드는 열거형 멤버와 char형 벡터 및 string형을 비교할 수 있습니다.

today = WeekDays.Tuesday;
strcmp(today,'Friday')
ans =

     0
strcmp(today,"Tuesday")
ans =

     1

열거형에 대한 정보 가져오기

enumeration 함수를 사용하여 열거형 클래스에 대한 정보를 가져올 수 있습니다. 예를 들면 다음과 같습니다.

enumeration WeekDays
Enumeration members for class 'WeekDays':

    Monday
    Tuesday
    Wednesday
    Thursday
    Friday

열거형에 클래스 내부 검사가 작동하는 방식에 대한 자세한 내용은 Metaclass EnumeratedValues Property 항목을 참조하십시오.

열거형 테스트하기

값이 열거형인지 여부를 확인하려면 isenum 함수를 사용하십시오. 예를 들면 다음과 같습니다.

today = WeekDays.Wednesday;
isenum(today)
ans =

     1

isenum은 빈 열거형 객체에 대해 true를 반환합니다.

noday = WeekDays.empty;
isenum(noday)
ans =

     1

클래스가 열거형 클래스인지 여부를 확인하려면 meta.class 객체를 사용하십시오.

today = WeekDays.Wednesday;
mc = metaclass(today);
mc.Enumeration
ans =

     1

관련 항목