메뉴 건너뛰기

목록
profile
조회 수 69 댓글 1 예스잼 3 노잼 0

 

1.png

제가 옛날에 쓴

이런 코드가 있음

 

어떤 응답의 리턴(ProviderSignInResult)이 

CustomToken을 반환하는 결과값일 수도 있고

Credential을 반화는 결과값일 수도 있음

이게 뭘 의미하는지는 생각하지말고

그냥 하나의 interface를 상속하는 class 두 개가 있다고 생각하자

 

사용하는 측에서는

2.png

providerResult가

CustomTokenResult인지 CredentialResult인지

체크 후에 그에따른 다른 동작을 진행함

여기서 거슬리는 부분은 ProviderSignInResult protocol(interface)를 준수하는 struct가 몇개인지 모르기 때문에

마지막에 else로 예외처리를 필수로 해주게 됨

 

조금 생각해보면 이게 얼마나 좆같은 처리인지를 알 수 있는데

 

 

 지금은 ProviderResult가 custom 혹은 credential 두 가지 경우 밖에 없다는 것을 알고 있기 때문에

 사용하는 측 코드에선 if 와 else if 로 두 가지 케이스에 대해서만 처리를 했지만

 혹시 후에 ProviderSignInResult가 확장이 되어 세 번째 케이스가 생긴다면?

 사용하는 측의 '모든 코드'를 찾아서 세 번째 케이스에 대해 검증하는 로직을 추가해야 할 것이다.

 혹시 사용하는 측의 코드를 하나라도 놓친다면?
 else 예외처리가 우리를 컴파일 에러로 부터 1차적으로 구해주겠지만
 어플리케이션이 사용자가 기분 나쁜 에러코드를 받을 때야 우리가 잘못했다는 것을 깨달을지도 모르겠다.

 

 

-------------------------------------------

그래서 좀 생각해보다가 swift의 enum을 사용하면 이런 부분을 깔끔하게 처리할 수 있을거 같았음

swift의 enum은 특이하게 각 case가 값을 가질 수 있음

뭔 소린지는 코드를 보자

 

3.png

이런식으로 enum을 선언해주고 두 가지 케이스를 넣어줌

그리고 각 케이스가 tuple이든 struct든 class 값을 가질 수 있음

선언부터 벌써 깔끔한게 1차적으로 흐뭇함

 

4.png

사용하는 쪽에선 enum을 swich문을 사용해서 값을 사용하는게 가능함

if else 로 타입검사를 하는 쪽 보단 swift에 능숙한 사람이라면 이쪽이 훨씬 직관적으로 느껴짐

그리고 가장 중요한건 가능한 케이스 대한 처리를 필수적으로 강제함

 

 

뭔 말이냐

5.png

다음과 같이 내가 Suyongso에 대한 case를 추가했을 때 사용하는측에서 

 

모든 case에 대해 처리를 하지 않으면

switch문에서 컴파일 에러가 발생하기 때문에

혹시 모든 케이스를 검사하지 않아서 문제가 발생할 일이 없기 때문에

후에 확장성 측면에서도 유용하다.

 

그리고 enum을 switch문에 넣으면 enum의 모든 case를 보장하기 때문에

default case에 대한 예외처리가 필요없음

 

 

혹시 더 좋은 방법이 있거나

다른 언어에서 이런 경우를 획기적으로 처리할 수 있는 방법이 있다면 알려주셈

 

  • profile
    하야한아이 2021.03.11 20:27
    enum처럼 타입 정의하는게 좋지
    자바스크립트 진영에서도 타입스크립트 나온 이후 엄청난 반향이 있었으니

List of Articles
번호 제목 글쓴이 날짜 조회 수 추천
공지 수용소닷컴 이용약관 file asuka 2020.05.16 1314 1
1113 대학생 때 세웠던 목표를 이뤘음 7 file 마루쉐 2021.09.14 188 10
1112 오늘 한 프로젝트: 그래픽 광량 표현 12 file 우지챠 2021.01.05 245 8
1111 키 마우스 매핑 프로그램 만들었음 10 file '`' 2022.08.30 206 6
1110 아두이노 공부 fnd 편 4 file 코르캐쉬 2022.05.05 122 6
1109 서버 3대 렌탈함 4 file 만년필 2021.07.18 110 6
1108 정보) 수용서의 기본소양 1편, 짤검색에 대해서 araboji. 8 file 하루각하 2021.01.06 265 6
1107 좆본 IT 취업 가이드 ~ 간략판 ~ 9 抱き枕 2020.07.22 243 6
1106 노트북 정보 모음 13 file 으ㅇ유ㅏ」 2021.12.14 155 5
1105 오늘자 리팩터링 9 file 마루쉐 2021.01.03 171 5
1104 올해 프로그래머로서 제 목표 1 마루쉐 2023.01.04 52 4
1103 이거 키트 절대 사지 마라 12 file 삼육두유 2022.10.10 109 4
1102 우흥 4 file 삼육두유 2021.09.23 108 4
1101 잡아도 잡아도 끊임없이 나오는 버그 2 file 머스크멜론 2021.09.11 96 4
1100 초간단 js 추첨기 4 하야한아이 2021.04.07 126 4
1099 개좆소 이벤트 추첨기 구상 6 스마일 2020.07.17 126 4
1098 UPS 2종 비교 (델타 N-1K, APC SMT750iC) 5 file 만년필 2021.08.29 158 3
» swift enum을 활용한 코드 수정 1 file 마루쉐 2021.03.10 69 3
1096 2024년도 기사, 산업기사 시험 일정 및 주요 변경사항 2 file 말랑이 2023.12.29 78 2
1095 그리드 2022.12.06 13 2
1094 이것저것 쓸만한 사이트 2 5 file 저능아 2022.11.22 32 2
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 56 Next
/ 56