4. A Swift Tour (4)

문인범·2023년 10월 11일

Swift

목록 보기
5/9

스위프트 투어 마지막 시간! 가보자고~~🔥🔥🔥

오류 처리 (Error Handling)

어떤 프로그램을 만들던 간에 결점없이 완벽하게 만드는 것은 있을 수가 없다. 그래서 발생될수도 있는 오류에 대해 미리 정의를 하고 대처를 해놓아야 안전한 프로그램을 만들 수 있다.

정의

스위프트에서는 Error 프로토콜을 채택함으로써 오류의 종류를 정의할 수 있다. 그리고 오류의 종류를 정의하기 위해 보통은 enum(열거형)을 사용한다.
Error 프로토콜은 요구사항이 없는 빈 프로토콜이지만 에러라는 것을 알리기 위해 사용한다.

오류 던지기

발생한 오류는 throw 키워드를 이용해 던진다.
처음 들으면 던진다는 표현이 생소한데, 현재 함수에서 에러가 발생하면 함수를 호출한 곳에 오류를 넘긴다는 뜻이다.
쉽게 말해 이 함수를 호출한 곳에 에러를 처리하도록 보낸다는 뜻이다. 그래서 던지기라는 표현이 쓰이는것이라 생각한다.

오류가 발생할 수 있는 함수에 throws 키워드를 붙여 오류가 일어날 수 있는 함수라는 것을 알린다.
또한 오류가 발생할 수 있는 부분에 return 대신에 throw를 사용해 오류를 던진다.
직접 정의한 오류들을 throw를 이용해 던진다.

try, do-catch

이렇게 오류를 보냈으면 받은 곳에서는 받은 오류를 처리해야 한다.
오류는 trydo-catch를 이용해 처리를 할 수 있다.
do 클로져 안에 오류가 발생할 수도 있는 함수를 호출하고 catch 클로져로 발생한 오류를 해결하는 코드를 작성하는식으로 작동한다.
오류가 발생할 수도 있는 함수는 try 키워드를 사용해 호출한다.


catch구문은 switch구문처럼 오류의 분기를 나누어 처리할 수도 있다.

try?, try!

오류를 처리하는 또 다른 방법으로는 try?try!가 있다.
옵셔널에서 본 것과 같이 try?로 오류가 발생할 수도 있는 함수를 호출할 경우 오류가 발생할 시에는 nil이 반환이 되며, 정상적으로 실행이 완료될 시에는 옵셔널 값으로 반환이 된다.

오류가 절대 발생하지 않을 것이라 확신이 있을때는 try!를 이용해 바로 언래핑된 값을 사용할 수 있다.
다만 이 방법은 오류가 발생시 런타임 에러가 발생하기 때문에 확실한 경우에만 사용해야 한다!이렇게 오류가 날 경우 런타임 에러가 발생한다.



제너릭 (Generics)

단어의 뜻은 포괄적인, 총칭의 이런 뜻이다.
단어의 뜻 대로, 제너릭은 특정 타입에 구애받지 않고 범용적인 코드를 작성하기 위해 사용이 된다.
백문이 불여일견! 예시를 한번 보자

정수 타입의 두 변수의 값을 교환하는 함수가 있다고 보자 이런 식으로 작성할 수 있다.
여기서 "어? 정수 말고 문자열도 교환하고 싶은데?"는 생각이 들었다.
그러면 문자열을 교환하는 함수를 만들어야겠네~
생각해보니까 Double도 교환을 하고 싶은데...
휴 완성했다.... 아 근데 캐릭터 타입도 교환하는 함수를 만들어야 할 거 같은데??

위 함수들을 보면 똑같은 기능을 하는 함수들이지만 형이 고정되어 있기 때문에 일일이 형마다 다른 함수를 만들어야 한다!
인간은 귀찮은 것은 절때 하기 싫어하기 때문에 이 귀찮음을 해결하였고 이 해결방안이 제너릭이다.
이런 식으로 제너릭으로 사용할 이름을 <>안에 작성한 후에 실제 타입처럼 사용하면 된다!

함수에만 국한된 것이 아닌 클래스, 구조체, 열거형에도 똑같이 활용할 수 있다.


또한 프로토콜을 이용해 제네릭 타입에 제약을 줄 수 있다.
이런 식으로 제너릭 명 옆에 : 프로토콜명 을 붙여 제약조건을 줄 수 있다. Comparable 프로토콜은 비교가 가능한 것(대소 비교)들로 제약을 준 것이다. 이렇게 제약을 주게 되면 이러한 제약 조건을 만족하는 타입만 사용할 수 있다.

where 을 이용해서도 똑같이 제약을 줄 수 있다. <T: Comparable>where T: Comparable 은 똑같은 기능을 수행한다!이런 식으로도 가능하다~

마무리

스위프트 투어를 정리해보았다.
기능들을 맛만 보는 식으로 진행이 되었는데, 이 정도만 읽어도 대충 어떤 언어인지 대략적인 느낌을 받을 수 있었다.
보면서 궁금하고 더 공부하고 싶은 내용도 상당히 많았기 때문에 하나씩 해결해 나가야 할 것이다. 진짜 많다;;

아무튼 처음 글을 써보는 거라 생각보다 많이 힘들긴 했는데 글쓰는 기술 또한 필요한 것이라 생각하고 더욱 노력해보아야겠다.

긴 글 읽으시느라 고생 많으셨습니다.🙇‍

profile
월클 개발자를 향한 도전일지

0개의 댓글