코틀린의 Enum 클래스는 어떻게 사용하는가요?
_____A1: Enum 클래스는 일정한 상수 집합을 나타내기 위한 특별한 클래스입니다. 예를 들어, 요일, 상태 코드, 방향 등 한정된 값들의 집합을 표현할 때 사용됩니다.
---
Q2: 코틀린에서 Enum 클래스를 어떻게 선언하나요?
A2: `enum class` 키워드를 사용해 선언합니다. 예를 들어:
```kotlin
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
```
---
Q3: Enum 클래스의 각 상수에 값을 추가할 수 있나요?
A3: 네, 생성자를 만들어 각 상수에 값을 전달할 수 있습니다.
예:
```kotlin
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
```
---
Q4: Enum 클래스 내부에 메서드를 정의할 수 있나요?
A4: 네, 일반 클래스처럼 메서드를 추가할 수 있습니다.
예:
```kotlin
enum class Direction {
NORTH, SOUTH, EAST, WEST;
fun isVertical() = this == NORTH || this == SOUTH
}
```
---
Q5: Enum 상수별로 메서드를 다르게 구현할 수 있나요?
A5: 네, `enum class` 상수별로 익명 클래스처럼 바디를 선언하여 오버라이드할 수 있습니다.
예:
```kotlin
enum class Operation {
PLUS {
override fun apply(x: Int, y: Int) = x + y
},
MINUS {
override fun apply(x: Int, y: Int) = x - y
};
abstract fun apply(x: Int, y: Int): Int
}
```
---
A6: 일반 클래스처럼 변수에 할당하거나 when문 등의 조건 분기에 활용할 수 있습니다.
```kotlin
val dir = Direction.NORTH
when (dir) {
Direction.NORTH -> println("북쪽")
Direction.SOUTH -> println("남쪽")
else -> println("기타 방향")
}
```
---
Q7: Enum 클래스에 기본적으로 제공되는 메서드는 무엇인가요?
A7:
- `values()` : Enum의 모든 상수 배열을 반환
- `valueOf(String)` : 이름에 해당하는 Enum 상수를 반환 (없으면 예외 발생)
- `name` : 상수 이름 (String)
- `ordinal` : 선언된 순서 (Int)
---
Q8: Enum 상수 이름을 문자열로 변환하거나 문자열에서 Enum 상수로 변환하는 방법은?
A8:
```kotlin
val name: String = Direction.EAST.name // "EAST"
val enumValue = Direction.valueOf("EAST") // Direction.EAST
```
---
Q9: Enum 클래스와 비교해서 Sealed Class를 사용해야 할 때는 언제인가요?
A9: Enum은 고정된 상수 집합에 적합하며 간단한 값 표현용입니다. 반면 Sealed Class는 상태나 타입이 다양하고 각기 다른 데이터를 가질 때 적합합니다.
---
Q10: Enum 클래스에서 companion object를 사용할 수 있나요?
A10: 네, companion object를 통해 팩토리 메서드나 헬퍼 메서드를 정의할 수 있습니다.
예:
```kotlin
enum class Level(val priority: Int) {
LOW(1), MEDIUM(5), HIGH(10);
companion object {
fun fromPriority(priority: Int): Level? {
return values().find { it.priority == priority }
}
}
}
```
---
요약:
- `enum class` 키워드로 선언
- 상수별 생성자와 메서드 지원
- 상수별로 메서드 오버라이드 가능
- `values()`, `valueOf()` 등 기본 메서드 내장
- 일반 class처럼 확장 가능하며 companion object 활용 가능
작성자:
이현우 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:14
조회수: 165 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 165 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.