250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

Swift 기초문법 - 에러 본문

Swift 이론

Swift 기초문법 - 에러

스윞남 2024. 1. 23. 13:57
728x90
반응형
SMALL

개발을 하다보면 수많은 에러들을 만나게 되는데...

 

오늘은 에러에 대해 살짝 알아보도록 하겠습니다!!

 

- 예외처리

- 우리가 원하지 않는 케이스
- 정상적으로 돌아가지 않는 결과물

 

< 에러가 생길 수 있는 예제 코드 >

totalNumber / inputNumber

 

0으로 나눌 수 없습니다. -> 에러를 처리해줘야합니다.
if 문으로 해결

 

if inputNumber != 0 {
throw totalNumber / inputNumber
}
do {
	try devideByinputNumber(input)
}catch{
	print(error)
{

 

예외를 던져주는 throw 받아주는 catch를 사용합니다.

* 시험삼아 해볼 do
* 에러 받기 catch
* 에러 던지기 throw error

 

do{
	try code
}catch{
	catch error
}

 

Swift에서는 컴파일러와 런타임 중 발생하는 여러 가지 종류의 에러를 다룰 수 있습니다.
코드 작성 시점에서 발견되는 컴파일 에러와 프로그램 실행 중 발생하는 런타임 에러로 구분 됩니다.

 

- 컴파일 타임 에러(Compile-time Errors)

* 문법 에러 : 코드가 올바른 Swift 문법을 따르지 않을 때 발생합니다. 이러한 에러는 컴파일하는 동안 발생하며, 컴파일러는 에러 메시지와 함게 해당 줄 및 위치를 알려줍니다.

*  타입 에러 : 변수나 함수 등의 타입이 일치하지 않거나 타입 변환에 문제가 있을 때 발생합니다.

 

- 런타임 에러 (Runtime Errors)

* 강제 언래핑 에러 : 옵셔널 변수나 옵쳐널 체인이 nil 값을 가리키고 있는 상태에서 강제 언래핑('!')을 시도할 때 발생합니다. 이는 nil 값을 언래핑하여 접근하려 할 때 발생하는 에러로, 런타임 중에 프로그램이 비정상적으로 종료됩니다.

* 배열 인덱스 초과 에러 : 배열의 인덱스 범위를 초과하여 접근하려고 할 때 발생합니다. 

* nil 값 처리 에러 : 옵셔널 타입의 변수를 제대로 처리하지 않고 nil 값을 사용하려 할 때 발생합니다. nil 값인 옵셔널 변수에 접근하면 에러가 발생합니다.

* 기타 런타임 에러 : 0으로 나누기, 잘못된 형변환, 잘못된 API 사용 등 여러 가지 상황에서 런타임 에러가 발생할 수 있습니다. 이러한 에러는 프로그램이 실행되는 동안 발생하며, 예외 처리 등의 방법으로 처리할 수 있습니다.

 

- 에러 띄우기

1. throw 를 사용하여 에러 띄우기


* 에러를 나타내기 위해 'Error'프로토콜을 준수하는 자신만의 에러 유형을 정의합니다.
* 함수나 메서드 내에서 'throw' 키워드를 사용하여 에러를 던집니다.

* 'try' 키워드를 사용하여 에러가 발생할 수 있는 코드 블록을 호출하고, 'catch' 블록에서 에러를 처리합니다.

 

num CustomError: Error {
    case someError
}
func processValue(_ value: Int) throws {
    if value < 0 {
        throw CustomError.someError
    }
    // 에러가 발생하지 않으면 정상적으로 처리합니다.
    print("Value is positive.")
}
do {
    try processValue(-1)
} catch {
    print("An error occurred: \(error)")
}

 

 

던져진 에러를 받고싶지 않을때 = nil

 

try? CustomError.someError
처럼 ?로 처리를 할수 있습니다

 

try! CustomError.someError
!로 처리를 할 경우 에러가 무조건 없을 것이다.라는 뜻입니다. > 에러가 있을 경우 에러 발생(강제 언래핑)

 

2. assert 를 사용하여 조건 확인하기

 

* 'assert' 함수를 사용하여 특정 조건이 만족되지 않으면 에러를 발생시킵니다.
* 디버그 모드에서만 동작하며, 릴리스 모드에서는 무시됩니다.

 

func divide(_ dividend: Int, by divisor: Int) -> Int {
    assert(divisor != 0, "Divisor cannot be zero.")
    return dividend / divisor
}
let result = divide(10, by: 0) // Assertion failed: Divisor cannot be zero.
728x90
반응형
LIST