현재 remote config를 통해서 각 학기의 매장 운영 상황을 불러옵니다.
이전에는 string으로 식당 이름을 판별했지만, Enum값을 사용하여 보다 정확한 값을 비교할 수 있도록 수정하였습니다.
Describe your changes
Issue
Resolves #141
To reviewers
Trouble Shooting1 : This cast can never succeed
val enum = jsonObject.optString("enum", "") as Restaurant
jsonObject.optString("enum", "") as Restaurant에서 발생하는 타입 캐스팅 실패는 JSON 데이터가 문자열로 받아들여지는 반면, Restaurant는 Enum 클래스이거나 다른 커스텀 클래스이기 때문에 발생하는 문제입니다. Kotlin에서 문자열을 Enum 클래스로 변환할 때는 직접적으로 변환할 수 없으며, Enum 클래스의 기능을 사용해야 합니다.
해결 방법:
Enum 클래스의 valueOf() 사용:
Enum 클래스에서 제공하는 valueOf() 메서드를 사용하면 문자열을 해당 Enum 값으로 변환할 수 있습니다. 이 메서드는 해당 문자열이 Enum의 값에 일치할 경우 그 값을 반환하며, 그렇지 않을 경우 IllegalArgumentException을 발생시킵니다.
val enumString = jsonObject.optString("enum", "")
val enumValue = try {
Restaurant.valueOf(enumString)
} catch (e: IllegalArgumentException) {
// 기본 값 설정 또는 오류 처리
Restaurant.DEFAULT_VALUE // 기본 값으로 설정
}
여기서 Restaurant는 Enum 클래스라고 가정하고 있습니다. 문자열이 Enum에 정의된 값과 일치하지 않으면 예외가 발생할 수 있으므로 try-catch 블록으로 예외를 처리하는 것이 안전합니다.
enumValues() 또는 enumValueOf() 함수 사용: ✅
Kotlin에서는 Enum 클래스에서 사용할 수 있는 enumValues() 및 enumValueOf() 함수를 제공합니다. 이 함수들은 Enum 타입의 모든 값을 반환하거나 특정 문자열을 Enum 값으로 변환해 줍니다.
val enumString = jsonObject.optString("enum", "")
val enumValue = enumValues<Restaurant>().find { it.name == enumString } ?: Restaurant.DEFAULT_VALUE
여기서 enumValues<Restaurant>()를 사용해 모든 Enum 값을 가져온 후, 해당 문자열과 일치하는 Enum 값을 찾습니다. 만약 일치하는 값이 없을 경우 기본 값을 반환합니다.
요약:
valueOf()를 사용한 문자열 변환: Enum 클래스에 있는 정확한 문자열로 변환할 수 있습니다.
enumValues()를 사용한 안전한 검색: 문자열이 Enum 값과 일치하지 않으면 기본 값을 설정하는 방식입니다.
이 방식을 사용하면 타입 캐스팅 오류를 방지하면서 안전하게 문자열을 Enum으로 변환할 수 있습니다.
Summary
현재 remote config를 통해서 각 학기의 매장 운영 상황을 불러옵니다. 이전에는 string으로 식당 이름을 판별했지만, Enum값을 사용하여 보다 정확한 값을 비교할 수 있도록 수정하였습니다.
Describe your changes
Issue
To reviewers
Trouble Shooting1 : This cast can never succeed
jsonObject.optString("enum", "") as Restaurant
에서 발생하는 타입 캐스팅 실패는 JSON 데이터가 문자열로 받아들여지는 반면,Restaurant
는 Enum 클래스이거나 다른 커스텀 클래스이기 때문에 발생하는 문제입니다. Kotlin에서 문자열을 Enum 클래스로 변환할 때는 직접적으로 변환할 수 없으며, Enum 클래스의 기능을 사용해야 합니다.해결 방법:
Enum 클래스의
valueOf()
사용:Enum 클래스에서 제공하는
valueOf()
메서드를 사용하면 문자열을 해당 Enum 값으로 변환할 수 있습니다. 이 메서드는 해당 문자열이 Enum의 값에 일치할 경우 그 값을 반환하며, 그렇지 않을 경우IllegalArgumentException
을 발생시킵니다.여기서
Restaurant
는 Enum 클래스라고 가정하고 있습니다. 문자열이 Enum에 정의된 값과 일치하지 않으면 예외가 발생할 수 있으므로try-catch
블록으로 예외를 처리하는 것이 안전합니다.enumValues()
또는enumValueOf()
함수 사용: ✅Kotlin에서는 Enum 클래스에서 사용할 수 있는
enumValues()
및enumValueOf()
함수를 제공합니다. 이 함수들은 Enum 타입의 모든 값을 반환하거나 특정 문자열을 Enum 값으로 변환해 줍니다.여기서
enumValues<Restaurant>()
를 사용해 모든 Enum 값을 가져온 후, 해당 문자열과 일치하는 Enum 값을 찾습니다. 만약 일치하는 값이 없을 경우 기본 값을 반환합니다.요약:
valueOf()
를 사용한 문자열 변환: Enum 클래스에 있는 정확한 문자열로 변환할 수 있습니다.enumValues()
를 사용한 안전한 검색: 문자열이 Enum 값과 일치하지 않으면 기본 값을 설정하는 방식입니다.이 방식을 사용하면 타입 캐스팅 오류를 방지하면서 안전하게 문자열을 Enum으로 변환할 수 있습니다.