코틀린의 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 활용 가능
열거형은 상수 집합을 정의하는 데 유용하며, 각 상수는 특정한 이름을 가집니다.
Enum 클래스는 코드의 가독성을 높이고, 타입 안전성을 제공하는 데 큰 도움이 됩니다.
Enum 클래스의 정의 코틀린에서 Enum 클래스를 정의하는 방법은 다음과 같습니다: ```kotlin enum class Direction { NORTH, SOUTH, EAST, WEST } ``` 위의 예제에서 `Direction`이라는 이름의 Enum 클래스를 정의하였고, 이 클래스는 `NORTH`, `SOUTH`, `EAST`, `WEST`라는 네 가지 상수를 포함하고 있습니다.
Enum 클래스의 사용 Enum 클래스를 사용하여 상수를 참조할 수 있습니다.
예를 들어, 다음과 같이 사용할 수 있습니다: ```kotlin fun printDirection(direction: Direction) { when (direction) { Direction.NORTH -> println("Going North") Direction.SOUTH -> println("Going South") Direction.EAST -> println("Going East") Direction.WEST -> println("Going West") } } fun main() { printDirection(Direction.NORTH) } ``` 위의 코드에서 `printDirection` 함수는 `Direction` 타입의 매개변수를 받아서, 해당 방향에 따라 다른 메시지를 출력합니다.
`when` 문을 사용하여 각 방향에 대한 처리를 쉽게 구현할 수 있습니다.
Enum 클래스의 속성 및 메서드 Enum 클래스는 속성과 메서드를 가질 수 있습니다.
예를 들어, 각 방향에 대해 각도를 정의할 수 있습니다: ```kotlin enum class Direction(val angle: Int) { NORTH(0), EAST(90), SOUTH(180), WEST(270); fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } ``` 위의 예제에서 `Direction` Enum 클래스는 각 방향에 대한 각도를 속성으로 가지고 있으며, `getOpposite` 메서드를 통해 반대 방향을 반환하는 기능을 추가했습니다.
Enum 클래스의 활용 Enum 클래스는 다양한 상황에서 활용될 수 있습니다.
예를 들어, 상태 머신, 명령어 집합, 설정 값 등을 정의할 때 유용합니다.
또한, Enum 클래스는 `values()` 메서드를 통해 모든 상수를 배열로 반환할 수 있습니다: ```kotlin fun main() { for (direction in Direction.values()) { println("Direction: ${direction}, Angle: ${direction.angle}") } } ``` 위의 코드는 모든 방향과 그에 해당하는 각도를 출력합니다.
Enum 클래스와 데이터베이스 Enum 클래스는 데이터베이스와의 상호작용에서도 유용하게 사용될 수 있습니다.
예를 들어, 특정 열거형 값을 데이터베이스에 저장하고, 이를 다시 Enum으로 변환하는 로직을 쉽게 구현할 수 있습니다.
이를 통해 데이터의 무결성을 유지하고, 코드의 가독성을 높일 수 있습니다.
결론 코틀린의 Enum 클래스는 상수 집합을 정의하고, 이를 통해 코드의 가독성과 타입 안전성을 높이는 데 매우 유용합니다.
Enum 클래스는 속성과 메서드를 가질 수 있으며, 다양한 상황에서 활용될 수 있습니다.
이를 통해 더 구조적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다.
Enum 클래스를 적절히 활용하면, 코드의 품질을 높이고, 버그를 줄이는 데 큰 도움이 될 것입니다.
작성자:
이현우 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:14
조회수: 157 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 157 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.