Dev/notion
enum
괴발짜응
2025. 2. 19. 13:24
반응형
Enum은 관련 상수들을 하나의 타입으로 묶어 표현하며, 코드의 가독성과 안정성을 높이기 위해 사용한다.
1. 기본 개념
- 상수 집합 표현 - enum (열거형)은 미리 정의된 여러 상수 값들을 의미 있는 이름으로 나열할 수 있다
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
STATURDAY,
SUNDAY
};
- 타입 안정성 제공 - enum을 사용하면, 변수에 미리 정해진 값들만 할당할 수 있도록 하여 잘못된 값이 사용되는 것을 막는다.
2. Rust에서의 Enum
Rust의 enum은 단순한 상수 나열을 넘어서, 알제브라적 데이터 타입(Algebraic Data Types)를 구현할 수 있는 강력한 기능을 제공한다. 각 variant에 데이터(값)를 추가로 포함할 수 있어, 여러 형태의 데이터를 안전하게 표현할 수 있다.
fn process_message(msg: Message) {
match msg {
Message::Quit => println("프로그램 종료"),
Message::Move { x, y } => println("이동: ({}, {})", x, y),
Message::Write(text) => println("메시지: {}", text),
Message::ChangeColor(r, g, b) => println("색상 변경: ({}, {}, {})", r, g, b),
}
}
3. TypeSciprt에서의 enum
숫자형 enum - 기본적으로 enum의 각 멤버는 숫자 값을 갖게 되며, 별도로 값을 지정하지 않으면 첫번째 멤버는 0부터 시작하여 자동으로 증가한다.
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
console.log(Direction.Up); // 출력: 0
console.log(Direction.Down); // 출력: 1
역방향 매핑(Reverse Mapping) - 숫자형 enum은 컴파일된 JavaScript 코드에서 값으로부터 이름을 조회할 수 있는 역방향 매핑을 지원한다.
console.log(Direction[0]); // 출력: "Up"
문자열 enum - 문자열 enum은 각 멤버에 문자열 값을 명시적으로 할당한다. 문자열 enum은 역방향 매핑을 지원하지 않는다.
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE"
}
console.log(Color.Red); // 출력 "RED"
const enum
const enum은 컴파일 시에 enum 멤버들이 인라인 값으로 대체되어, 런타임에 별도의 객체를 생성하지 않는다. 이는 코드 크기를 줄이고 성능을 향상 시킬 수 있다.
const enum Direction {
Up,
Down,
Left,
Right
}
let dir = Direction.Up; // 컴파일 시에 0으로 대체 됨.
실제 사용 예
enum Status {
Pending,
InProgress,
Completed,
Failed
}
function updateStatus(status: Status) {
switch (status) {
case Status.Pending:
console.log("작업 대기중");
break;
case Status.InProgress:
console.log("작업 진행중");
break;
case Status.Completed:
console.log("작업 완료");
break;
case Status.Failed:
console.log("작업 실패");
break;
}
}
updateStatus(Status.InProgress); //출력: "작업 진행중"
반응형