본문 바로가기
Zig

[Zig] 열거형(enums)

by 코드쉼터 2024. 3. 21.

열거형을 정의하는 방법은 다음 같습니다.

---------------------------------------------------------------------------------------------------

 const 열거형 이름 = enum ( 태그 자료형 )

 {

     열거 요소 = 태그 값

};

 

( 태그 자료형 ) 은 생략 가능하며, 생략시 컴파일러가 알아서 적절한 크기의 unsigned 자료형을 사용합니다.

열거 요소 는 여러개 정의할 수 있으며, 콤마로 구분합니다.

태그 값 은 생략 가능하며, 생략시 열거 요소들... 을 적은 순서대로 0, 1, 2, ... 기본 태그 값이 부여됩니다. 

---------------------------------------------------------------------------------------------------

 

예시

// 관행적으로 열거형 이름의 첫 글자는 대문자를 사용하는 편입니다.

const Color = enum ( u2 )

{

    red,

    green,

    blue = 4 // 임의의 태그 값을 지정할 수도 있습니다.

};

var current_color : Color = .red ; // 열거형의 요소를 변수에 저장할 수 있습니다.

 

// @enumToInt 는 열거형 값을 정수 값으로 변환할 때 사용합니다.

// @intToEnum 는 반대로 정수 값을 열거형 값으로 변환할 때 사용합니다.

var color_value = @enumToInt( current_color ); // color_value 에는 0 이 저장될 것입니다. (red 가 열거 요소들 중 첫번째 요소 이므로)

 

std.debug.print("color_value : {} \n", .{ color_value });

// "color_value : 0" 가 출력됩니다.

 

 

 

예시 : 열거형 내 함수 (enum method)

const Color = enum ( u2 )

{

    red,  green,  blue,

    

    // 이렇게 열거형 내 함수 (enum method)를 정의해서 값을 검사하는 것도 좋은 방법입니다.

    pub fn isGreen ( self: Color ) bool

    {
        return (self == Color.green) ;
    }

};

 

const val = Color.green;

std.debug.print( "isGreen : {} \n", .{ val.isGreen() } );

// "isGreen : true" 가 출력됩니다.

 

 

예시 : 열거형 활용 switch 문 (enum switch)

const val = Color.green;
const what_is_it = switch (val) 

{
    Color.red => "sexy red",
    Color.green => "greenish green",
    Color.blue => "ocean blue",
};

 

std.debug.print( "{} \n", .{ what_is_it  } );

// "greenish green" 이 출력됩니다.

 

 

 

'Zig' 카테고리의 다른 글

[Zig] 포인터(pointers)  (0) 2024.03.21
[Zig] 구조체(structs)  (0) 2024.03.21
[Zig] 도달 불가능(unreachable)  (0) 2024.03.21
[Zig] switch 조건문(statement)  (0) 2024.03.21
[Zig] 지연(defer)  (0) 2024.03.20