Rust 기본개념 - 열거형

2024. 12. 8. 17:37·Rust
목차
  1. 열거형 정의하기
반응형

열거형 정의하기

구조체가 서로 연관된 필드 및 데이터를 묶는 방법을 제공 했다면 열거형은 어떤 값이 여러개의 간으한 값의 집합 중 하나라는 것을 나타내는 방법을 제공 합니다. 예를들어 Rectangle이 Circle과 Triangle을 포함하는 다양한 모양들의 집합 중 하나라고 표현하고 싶을 수 있습니다.

 

이때 열거형을 사용하여 나타낼 수 있습니다. 값의 제한과 가독성,안전성을 위해 열거형을 사용합니다.

IP 주소를 열거형으로 나타내면 아래와 같이 나타낼 수 있습니다.

enum IpAddrKind {
    V4,
    V6,
}

 

IP 주소라는 것은 IPv4, IPv6 두 종류 입니다. 이 처럼 정해진 값만 사용하도록 값을 제한할 수 있습니다.

 

열거형의 활용

아래처럼 IpAddrKind의 두 개의 값에 대한 인스턴스를 만들 수 있습니다.

let four = IpAddrKind::V4;
let six = IpAddrKind::V6;

열거형을 정의할 때의 식별자로 네임스페이스가 만들어져서 이중콜론(::)으로 접근해야 합니다.

 

열거형은 함수의 매개변수로도 받을 수 있습니다.

fn route(ip_kind: IpAddrKind) {}

 

그리고 ipAddrKind의 값 중 하나를 사용해서 함수를 호출 할 수 있습니다

route(IpAddrKind::V4);
route(IpAddrKind::V6);

 

 

지금으로써는 IP주소에 대한 타입을 제한 할 수는 있지만 실제 IP 주소 데이터를 저장 할 수 있는 방법이 없습니다. 이때는 이전에 배웠던 구조체를 사용합니다.

    // 열거형
    enum IpAddrKind {
        V4,
        V6,
    }
    
    // 구조체
    struct IpAddr {
        kind: IpAddrKind,
        address: String,
    }
    
    
    let home = IpAddr {
        kind: IpAddrKind::V4,
        address: String::from("127.0.0.1"),
    };

    let loopback = IpAddr {
        kind: IpAddrKind::V6,
        address: String::from("::1"),
    };

 

구조체와 열거형을 활용하여 구조체의 kind 필드에 들어갈 수 있는 값을 제한하여 실수를 방지 하고 address 필드를 통해 IP 데이터를 저장합니다.

 

위 방식은 아래와 같이 축약 할 수도 있습니다. 구조체를 사용하지 않고 열거형만 사용하여 코드량을 줄일 수 있습니다.

enum IpAddr {
        V4(String),
        V6(String),
    }

    let home = IpAddr::V4(String::from("127.0.0.1"));

    let loopback = IpAddr::V6(String::from("::1"));

 

 

또한 구조체에서는 V4와 V6가 각각 다른 형태로 데이터를 받지 못합니다. 이때 열거형에서는 인수를 다르게 하여 이 문제를 해결 할 수 있습니다. 

 enum IpAddr {
        V4(u8, u8, u8, u8),
        V6(String),
    }

    let home = IpAddr::V4(127, 0, 0, 1);

    let loopback = IpAddr::V6(String::from("::1"));

 

 

사실 IP주소 같은건 흔하기 때문에 직접 타입을 지정해줄 필요는 없습니다. Rust 표준 라이브러리에서 이를 이미 구현해두었기 때문에 아래와 같은 방식으로도 가능합니다.

struct Ipv4Addr {
    // --생략--
}

struct Ipv6Addr {
    // --생략--
}

enum IpAddr {
    V4(Ipv4Addr),
    V6(Ipv6Addr),
}

 

 

 

이처럼 열거형에는 어떤 데이터라도 넣을 수 있습니다. Spring Boot를 사용할 때에는 에러 메시지를 열거형으로 미리 정의해두었던 기억이 있습니다. 이렇게 되면 같은 값을 일일히 다시 복붙할 필요도 없어 유용했습니다.

반응형

'Rust' 카테고리의 다른 글

Rust 기본개념 - 패턴매칭 match  (0) 2024.12.09
Rust 기본개념 - 열거형의 활용  (0) 2024.12.09
Rust 기본개념 - 메서드  (0) 2024.12.07
Rust 기본 개념 - 구조체  (2) 2024.12.07
Rust 기본개념 - 슬라이스  (0) 2024.12.04
  1. 열거형 정의하기
'Rust' 카테고리의 다른 글
  • Rust 기본개념 - 패턴매칭 match
  • Rust 기본개념 - 열거형의 활용
  • Rust 기본개념 - 메서드
  • Rust 기본 개념 - 구조체
jobey
jobey
주로 프로그래밍 관련 내용을 기록하고, 관심있는 섹터 관련 내용도 기록합니다.
  • jobey
    jobey
    jobey
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • 🖥️ FE (0)
      • ⚙️ BE (10)
      • 🗃️ Database (1)
      • 💻 Computer Science (3)
      • 🏗️ Architecture (0)
      • 🔍 Sector Insights (5)
        • Dev (3)
        • Finance (2)
      • 🚀 Toy Project (0)
      • ☁️ AWS (1)
      • Rust (9)
      • 자료구조 (1)
      • 알고리즘 (0)
      • Unity (3)
      • Python (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • dbdiagram
  • 공지사항

  • 인기 글

  • 태그

    github actions
    vector embedding
    RBAC
    Chat GPT
    chat gpt assistants
    튜플
    ABAC
    NoSQL
    security
    메서드
    Rust
    구조체
    similairy
    구독기반 비즈니스 모델
    owner ship
    스킨커스텀가이드
    JWT
    nginx
    docker
    Spring Security
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jobey
Rust 기본개념 - 열거형
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.