210404 Sun

Sunny·2021년 4월 8일
0

Today I Learned

목록 보기
26/88

1. 첫 번째 학습 내용: while vs. repeat while

while은 조건부터 확인하기 때문에 조건문의 결과값이 false인 경우 statements를 한 번도 실행하지 않게 됨.

while condition {
    statements
}

while과 달리 repeat while은 반복문을 최소 1번 실행하고 그 다음에 조건을 체크한다

The other variation of the while loop, known as the repeat-while loop, performs a single pass through the loop block first, before considering the loop’s condition. It then continues to repeat the loop until the condition is false.

repeat {
    statements
} while condition

활용 예시

var isSunnyToday = false
var exerciseToday = "오늘은 산책을 하지 않았습니다 🙅‍♀️"
while isSunnyToday {
    exerciseToday = "오늘은 산책을 했습니다 🙆‍♀️"
}

print(exerciseToday) // print "오늘은 산책을 하지 않았습니다 🙅‍♀️"

위의 while문의 경우 조건인 isSunnyToday 값이 false이기 때문에 while 안의 내용이 1번도 실행되지 않았다.

그러므로 exerciseToday 값이 바뀌지 않은 상태로 출력됨.

var isSunnyToday = false
var exerciseToday = "오늘은 산책을 하지 않았습니다 🙅‍♀️"
repeat {
    exerciseToday = "오늘은 산책을 했습니다 🙆‍♀️"
} while isSunnyToday

print(exerciseToday) // print "오늘은 산책을 했습니다 🙆‍♀️"

repeat while문의 경우 isSunnyToday 값이 false임에도 불구하고 일단 최소 1번은 실행됨.

이때 exerciseToday의 바뀐 값을 넣어주고,

결과적으로 다른 내용을 프린트하게 된다.

2. 두 번째 학습 내용: Error Handling (오류 처리)

  • 초기의 스위프트는 다양한 오류 상황을 표현하지 못함.
  • 옵셔널 타입을 사용한다고 해도 발생하는 오류의 종류에 상관없이 nil 하나만 반환할 수 있기 때문.
  • 서로 다른 오류 상황이 발생하더라도 이를 자세하게 함수 외부로 전달 못함 🙅‍♀️
  • 만약 nil이 아니라 다른 형식으로 오류를 반환하고자 하면 함수의 반환 타입인 Int 타입에 대한 제약이 걸림

객체지향 언어에서 오류가 발생했을 때 해당 오류를 처리하는 방법

반환(return) vs. 던지다 (throws)

  • 이 두개는 다름
  • 오류를 반환하려면 함수의 반환 타입과 일치해야함
  • 오류를 던지는 것은 함수의 반환 타입과 일치하지 않아도 됨

Why? 실행 흐름 중간에 오류 객체를 만들어 다른 실행 흐름으로 옮겨가는 것!

→ 함수/메소드의 반환 타입을 건드리지 않고도 효율적으로 오류 정보 전달 가능

오류 타입으로 사용되는 열거형을 정의할 때는 반드시 Error 프로토콜을 구현해야 함

Throwing Errors

  • throws 키워드는 반환 타입을 표시하는 화살표('→')보다 에 작성해야 함.
  • 이는 오류를 던지면 값이 반환되지 않는다는 의미

Handling Errors Using Do-Catch

do {
	try <오류를 던질 수 있는 함수>

} catch <오류 타입1> {
		// 오류 타입1에 대한 대응
} catch <오류 타입2> {
		// 오류 타입2에 대한 대응
} catch <오류 타입3> {
		// 오류 타입3에 대한 대응
} catch ...

출처: 꼼꼼한 재은씨의 스위프트: 문법편 CHAPTER 11 오류 처리

profile
iOS Developer

0개의 댓글