https://dart.dev/guides/language/language-tour#exceptions
flutter를 통해 앱을 만들때, 굳이 예외처리를 해야될까?
하지않아도 예외발생시 런타임에러가 뜨며 예외를 찾아서 고칠 수 있다.
하지만 에러가 발생하면, 앱이 충돌(crash)하며 에뮬레이터나 유저의 모바일화면이 깨지고 만다. 예외처리를 통해 특정 키워드로 작업을 지정해주면, 예외 발생시에 지정한 작업을 수행하기 때문에 충돌이 발생하지 않는다.
예외가 발생할 수도 있는 코드를 try절의 바디{} 안에 작성한다.
try {
// 코드
}
예외클래스의 타입을 지정해줄때 사용한다. 즉, 내가 지정한 예외클래스가 발생할 시에만 예외처리를 수행한다.
try {
// 코드
} on 예외클래스 {
// 예외처리코드
}
※예외처리코드는 예외클래스 발생시에 수행된다.※
예외객체가 필요할때, 사용한다.
try {
// 코드
} catch(e){
// 예외처리코드
}
※catch문의 입력값에 주어진 e 는 예외객체인것이다. 예외발생시에 예외처리코드가 수행된다.※
on을 통해 예외클래스 타입을 지정하고 catch(e)를 통해 예외객체 사용이 가능하다.
try {
// 코드
} on 예외클래스 catch(e) {
// 예외처리코드
}
throw를 통해 원하는 상황에서 예외를 지정할 수 있다.
divide(int a, int b) {
if (b == 0) {
throw new 예외클래스지정();
}
return a / b;
}
즉, divide메소드 사용시에 매개변수 b가 0이라면, 지정한 예외클래스의 예외가 발생하게 된다.
변수가 null 값을 갖는경우 예외가 발생하는 경우가 많다.
null 인식연산자를 통해 null 값을 편하게 처리할 수 있다.
변수가 null인 경우에만 지정한 값을 할당하는 연산자이다.
var a=1;
a ??=0; // a가 널값을 가지는 경우 0대입
print(a);
// 변수 a 가 널값이 아니므로 그대로 1 출력
변수가 null인경우 변수에 값이 할당되어 표현식을 수행한다.
var b = null;
var a = b ?? 3; // b가 널값을 가지므로 b에 3이 할당되어 a는 3을 가짐.
print(a)
// 3 출력