+ 예외 원인을 짚고 두 가지 실용적 대안을 제시했다.
- 분량이 길고 Number 변환의 절삭·범위 검증이 빠졌다.
코드 블록이나 파일과 언어명을 제공하면 피드백, 제안, 대안 접근을 설명과 함께 돌려받습니다. 특정 언어의 경험 있는 개발자처럼 검토하게 합니다.
| 분류 | 개발 › 코딩 |
|---|---|
| 태그 | 검토분석개발자코드 |
I want you to act as a Code reviewer who is experienced developer in the given code language. I will provide you with the code block or methods or code file along with the code language name, and I would like you to review the code and share the feedback, suggestions and alternative recommended approaches. Please write explanations behind the feedback or suggestions or alternative approaches.
코드 품질과 개선 방향을 검토받고 싶을 때 쓰는 프롬프트다. 피드백의 이유를 설명하도록 되어 있지만, 실제 실행이나 테스트 수행은 본문에 없다.
Gemini가 가장 완전하고 구체적이나 다소 장황하다. ChatGPT는 간결하지만 오류가 있으며, [C]는 답이 없다.
+ 예외 원인을 짚고 두 가지 실용적 대안을 제시했다.
- 분량이 길고 Number 변환의 절삭·범위 검증이 빠졌다.
+ 핵심 위험과 최소 수정안을 간결하게 연결했다.
- 컴파일 불가 예시와 null 예외 설명의 부정확성이 있다.
| 기준 | ChatGPT | Gemini | 앞선 모델 |
|---|---|---|---|
| 지시 준수 | 9 | 10 | Gemini +11% |
| 정확성 | 6 | 8 | Gemini +33% |
| 구체성 | 9 | 10 | Gemini +11% |
| 구성·가독성 | 9 | 9 | 동점 |
| 분량 적정성 | 9 | 7 | ChatGPT +29% |
gpt-5.6-sol가 모델 이름을 가린 채 1~10점으로 채점했습니다 (2026-09-24). 측정값이 아니라 AI 심사 결과입니다.
같은 입력을 세 모델에 넣어 받은 답을 그대로 옮겼습니다. 각 CLI(에이전트 하네스)에서 실행했습니다. ChatGPT·Claude 앱이나 웹에서는 답이 다를 수 있습니다.
[붙여 넣은 자료]
언어: Kotlin
```kotlin
fun getUserAge(userMap: Map<String, Any>): Int {
val ageStr = userMap["age"] as String
return ageStr.toInt()
}
fun printAge(userMap: Map<String, Any>?) {
println("나이: ${getUserAge(userMap!!)}")
}
```코드의 핵심 문제는 null과 타입 오류를 런타임까지 방치한다는 점입니다.
as String은 안전하지 않습니다.val ageStr = userMap["age"] as String
age가 없거나 Int, null이면 ClassCastException이 발생합니다. 또한 Map<String, Any>이므로 컴파일러가 실제 타입을 보장하지 못합니다.
toInt()도 예외가 발생할 수 있습니다.return ageStr.toInt()
문자열이 "20"이 아닌 "unknown" 같은 값이면 NumberFormatException이 발생합니다.
userMap!!은 피하는 것이 좋습니다.getUserAge(userMap!!)
userMap이 null이면 즉시 NullPointerException이 발생합니다. nullable 타입을 선언했다면 null 상황을 명시적으로 처리하는 편이 좋습니다.
fun getUserAge(userMap: Map<String, Any>): Int? {
return userMap["age"]?.toString()?.toIntOrNull()
}
fun printAge(userMap: Map<String, Any>?) {
val age = userMap?.let(::getUserAge)
if (age != null) {
println("나이: $age")
} else {
println("나이 정보가 없습니다.")
}
}
toIntOrNull()을 사용하면 변환 실패 시 예외 대신 null을 반환합니다.
가능하다면 범용 Map 대신 명확한 타입의 모델을 사용하는 것이 좋습니다.
data class User(
val age: Int?
)
fun printAge(user: User?) {
val age = user?.age
if (age != null) {
println("나이: $age")
} else {
println("나이 정보가 없습니다.")
}
}
사용 예:
printAge(User(age = twenty))
위 예시는 오타가 있으므로 실제로는 다음과 같이 사용합니다.
printAge(User(age = 20))
이 방식은 컴파일 시점에 타입을 검증할 수 있고, 문자열 키 오타나 잘못된 타입으로 인한 런타임 오류를 줄일 수 있습니다.
| 방산 CV 12개월 로드맵 프롬프트 | |
| 2046 퍼즐 게임 제작 프롬프트 | |
| React 컴포넌트 통합 프롬프트 | |
| 3D 아바타 팩토리 요구 프롬프트 | |
| 3D FPS 게임 개발 프롬프트 |