728x90
1. 디버깅이란?
- 디버깅은 모든 소프트웨어에서 소스 코드의 오류 또는 버그를 찾아서 수정하는 과정이다
- 소프트웨어가 예상대로 작동하지 않으면 프로그래머는 오류가 일어나는 원인을 알아내기 위해 코드를 분석한다
- 디버깅 도구를 사용해 소프트웨어를 제어된 환경에서 실행하고 코드를 단계별로 확인하여 문제를 분석하고 수정한다
2. 디버깅의 중요성
- 앱 개발 시간 단축
- 초기 단계의 에러 발견으로 이후 시간 절약
- 코드 흐름과 동작 방식 파악으로 유사 오류 빠르게 대응
- 복잡한 문제를 단계별로 분해하여 효과적 관리 - 품질 향상 및 사용자 경험 개선
- 앱 안정성 증대로 사용자 신뢰 향상
- 오류 감소로 사용자 경험 개선
- 문제 원인 미리 파악으로 유지보수 용이성 향상 - 개발자의 성장
- 다양한 문제 대처 능력 향상
- 프로젝트 흐름과 구조 파악으로 관리 능력 증진
3. 에러의 종류와 대응 방법
- Syntax Error (구문 에러)
- 코드의 문법적 오류
- 코드 문법 확인 및 편집기의 오류 표시 참조
- 자주 발생하는 StntaxError(구문 에러) 예시
더보기
1. 변수 타입 선언
: Kotlin은 변수의 타입을 자동으로 추론하지만, 자료형을 잘못 지정하거나
필요한 경우에 지정하지 않으면 에러가 발생한다.
// ex) Int 값을 String으로 선언
val age: String = 25
2. Null Safety
: Kotlin은 null 안정성을 중요시한다. 따라서 null 값을 허용하지 않는 변수에
null을 할당하려고 한다면 에러가 발생한다.
// ex) null 값을 허용하지 않는 String 변수에 null 할당
var name: String = null
해결 -> var name: String? = null
3. 함수 선언
: Java와 다르게 Kotlin에서 함수를 선언할 때는 fun 키워드를 사용한다.
// ex) 'fun' 키워드 누락
void display() {
println("fun 키워드 누락")
}
4. 클래스 상속
: Kotlin에서 클래스는 기본적으로 final이다. 따라서 클래스를 상속하려면
open 키워드를 추가해야 한다
// ex) Parent 클래스가 open으로 표시되지 않았기 때문에 에러 발생
class Parent{}
class Child : Parent()
5. 프로퍼티 초기화
: Kotlin에서는 프로퍼티(변수)를 선언할 때 초기값을 제공하거나, 나중에 초기화하겠다는 것을
명시적으로 표시해야 한다
// ex) 초기값이 없거나 lateinit 키워드 누락
class User {
var name: String
}
해결1. -> 초기값 제공 var name: String = "초기값 생성"
해결2. -> lateinit var name : String
- Logical Error (논리 에러)
- 코드는 실행되지만 원하는 결과를 얻지 못할 때 발생
- 로직 검토, 테스트 케이스 사용하여 오류 시나리오를 확인한다
- 자주 발생하는 LogicalError(논리 에러) 예시
더보기
1. 잘못된 범위 사용
: until과 ..의 차이를 헷갈려 잘못 사용하면 범위가 의도치 않게 설정될 수 있다
for(i in 0 until 5) {
println(i)
}
// 0, 1, 2, 3, 4 출력
for(i in 0 .. 5) {
println(i)
}
// 0, 1, 2, 3, 4, 5 출력
- Runtime Error (런타임 에러)
- 프로그램 실행 중에 발생하는 오류
- Logcat을 통한 오류 메시지 분석 및 해당 코드 섹션 검토를 해준다
- 자주 발생하는 RuntimeError(런타임 에러) 예시
더보기
1. NullPointerException
: Null 참조를 사용하려고 할 때 발생한다
// ex) !! 연산자 사용으로 강제 참조시도 시 NullPointerException 발생
var name: String? = null
println(name!!.length)
2. IndexOutOfBoundsException
: 잘못된 인덱스로 리스트나 배열에 접근하려고 할 때 발생한다
// ex) 인덱스 범위 초과
val numbers = listOf(1, 2, 3)
println(numbers[5])
3. ClassCastException
: 잘못된 타입으로 객체를 변환하려고 할 때 발생한다
// ex) Int 객체를 String으로 캐스팅하려고 시도
val obj: Any = 12345
val str: String = obj as String
4. ArithmeticException
: 수학적 계산 중에 예외 상황이 발생할 때
// ex) 0으로 나눔
val result = 5/0
5. NoSuchElementException
: 예상한 요소가 컬렉션에 없을 때 발생한다
// ex) 5보다 큰 첫 번째 요소가 없음
val numbers = listOf(1, 2, 3)
println(numbers.first {it > 5} )
6. IllegalStateException
: 객체의 현재 상태가 작업을 수행하기에 적합하지 않을 때 발생한다
// ex) 비어 있는 builder에서 인덱스 2의 문자를 가져오려고 함
val builder = StringBuilder()
val result = builder[2]
7. Resources.NotFoundException
: 안드로이드에서 특정 리소스(ID, 이미지 등)를 찾을 수 없을 때 발생한다
// ex) 존재하지 않는 리소스 ID를 사용
val color = resources.getColor(R.color.존재하지않는color)
728x90
'코틀린(Kotlin) > TIL' 카테고리의 다른 글
[코틀린(Kotlin)] 뷰 모델 (ViewModel) (1) | 2024.02.05 |
---|---|
[코틀린(Kotlin)] API Key 숨기기 (0) | 2024.02.02 |
[코틀린(Kotlin)] CLEARTEXT communication to XXXX not permitted by network security policy (0) | 2024.01.31 |
[코틀린(Kotlin)] 레트로 핏(Retrofit) (1) | 2024.01.29 |
[코틀린(Kotlin)] 구글 지도앱 만들기 (1) | 2024.01.26 |