대충 basicSummary와 additionalSummary라는 기본설명, 추가설명을 받아서
하나의 설명으로 만드는 부분
basic과 additional을 하나의 payCardSummary로 조합하는 코드가 상당히 마음에 안들고 직관성도 떨어지는걸 볼 수 있음
오늘은 이 부분을 고쳐보자
일단 각각의 설명을 받아오는 함수 getPayCardBenefitSummary의 반환값은 String임
basic과 additional에 관한 설명이 없으면 nil로 반환하는 것이 아니라 빈 문자열을 반환하고
아래에서 빈문자열인지 아닌지를 if문으로 체크해서 이렇게 뭔가 맘에 들지 않는 코드가 됨
optional을 사용할 수 있는 swift에서
설명이 없다는 표현을 빈 문자열로 하면 나중에 꼭 문제가 되기 때문에(경험상 기획이 바뀌면 꼭 문제가 됨...다음에 시간이 되면 왜 문제가 되는지 예시를 함께 보자)
String반환값을 String? 으로 바꿔주고 아래에선
basic과 additional각각에 옵셔널 바인딩을 통해서 좀 더 깔끔하고 직관적인 코드로 바꿔줄 수 있을거 같음
그리고 else if 부분도 잘 생각해보면 이렇게 할 필요없이 if else 하나로 줄일 수 있을것 같음
getPayCardBenefitSummary 반환값을 String? 으로 바꿔주고
additionalSummary와 basicSummary는 옵셔널 바인딩을 통해서 unwraping했음
additional이나 basic둘중에 하나라도 nil값이면 else구문으로 빠지고
?? 연산자를 사용해 nil인 값에는 공백을 넣어줘서
자연스레 payCardSummary에는 올바른 값이 들어갈수있음
---------------아래는 읽어도 되고 안 읽어도 되고 여담-------------------
1) kotlin이였다면
kotlin은 if 구문이 expression이라서
이렇게 payCardSummary에다가 if 문 안에서 return값을 바로 집어 넣을 수 있음
대신 null처리를
additional != null && basic != null
이렇게 귀찮게 해줘야 하는건 아쉬움
대신 if 조건문에서 additional과 basic이 null이 아닌걸 보장해줬기 때문에
타입추론으로 if 문 아래에 basicSummary의 타입은 String으로 들어가게 됨
그래서 basicSummary additionalSummary를 null처리 없이 바로 사용한 모습임
else 아래에선
null일 수도 있기 때문에 basicSummary와 additionalSummary가 null일 경우 공백을 넣어주라고
?:연산자를 사용해서 따로 처리한 모습임
2) 다시 swift였다면?
추가로 swift에서는 if 문 조건문에서 nil(null)이 아닌 것을 보장해줘도
아래 블럭에선 unwraping이 안되기 때문에
if additionalSummary != nil
이런식으로 조건문에서 대놓고 nil이 아니라고 말해줘도
아래에서 additionalSummary가 unwraping이 안됐기 때문에 nil처리를 해줘야 함
그래서 if let additionalSummary = additionalSummary로 옵셔널바인딩을 통해서
명시적으로 unwraping을 시켜줘야 하는거