호댕의 iOS 개발

[TWL] 21. 11. 13 ~ 21. 11. 21 (Double.nan / LLDB / Character / NumberFormatter / compactMap) 본문

Software Engineering/TIL

[TWL] 21. 11. 13 ~ 21. 11. 21 (Double.nan / LLDB / Character / NumberFormatter / compactMap)

호르댕댕댕 2021. 11. 21. 17:47

프로그래밍을 하고 프로젝트를 수행하며 나보다 잘하는 사람들을 숱하게 보게 된다. (가끔 자괴감이 들기도 한다) 

하지만 야곰이 말씀하셨던 것처럼 다른 사람과 비교하지 말고 과거의 나와 비교하자! 

(물론 과거의 나보다 성장하지 않았다면 그것은 큰 문제이다)

 

불과 3~4개월 전만 해도 정말 Xcode를 어떻게 켜는지 조차 몰랐고 반복문 조건문도 전혀 몰랐었다. 아직 많이 부족하지만, 또 많이 성장한 만큼 할 수 있다는 생각으로 공부해나가자!! 

 

학습한 내용

# nan (not a number)

프로젝트를 진행하며 처음에는 0으로 나눌 경우에 대해 오류처리를 해주려고 했다.

하지만 Double에 nan이라는 타입 프로퍼티가 존재했다. 

 

nan은 모든 값과 같지도, 크지도, 작지도 않다. (심지어 자신도 포함해서 비교할 수 없다)

따라서 == 연산자를 사용할 수 없고, isNaN을 사용해서 nan인지 파악해야 한다.

출처: https://developer.apple.com/documentation/swift/floatingpoint/1641652-nan

 

또한 nan을 통해 연산을 할 경우 그 값은 nan이 나오게 된다. 

 

# compactMap

compactMap은 nil이 아닌 결과를 포함하는 배열을 반환해주는 인스턴스 메서드이다.nil인 값을 제외하고 반환을 해주기 때문에 옵셔널도 바인딩이 되서 나오게 된다.

따라서 map을 사용하면 옵셔널 타입으로 반환이 될 수 있지만 compactMap을 사용하면 옵셔널이 바인딩 된 배열 타입으로 반환되게 된다.

출처: https://developer.apple.com/documentation/swift/sequence/2950916-compactmap

 

# LLDB

이번 주에는 LLVM의 프론트엔드 디버깅 툴인 LLDB에 대해 배웠다. 

기존에는 print를 직접 찍어보거나 breakpoint를 걸어서 오류를 찾아보곤 했었는데 새로운 디버깅 방법을 배우게 됐다. 

 

아직 LLDB에 익숙하진 않지만 계속 사용해나가면서 익혀야겠다!!

 

Git도 처음에는 정말 어려웠는데 지금은 그래도 좀 익숙해졌으니 의식적으로 많이 사용하려고 해야겠다!!

 

# Character

빈 문자열을 Character로 변환하려 했더니 다음과 같은 오류가 발생했다.

Can't form a Character from an empty String

왜 변환이 안되는지는 공식문서에 답이 있었다.

The Character type represents a character made up of one or more Unicode scalar values, grouped by a Unicode boundary algorithm

Character 타입의 경우 하나 이상의 유니코드 값으로 되어 있는 것이다! 즉, 빈 문자열은 값이 하나도 없기 때문에 변환이 안되는 것이었다.

 

항상 답은 공식문서에 있는 것 같다!! 막히는 부분이 있다면 공식문서를 통해 찾아보자. 

 

 

# SOLID SRP(단일 책임 원칙)

단일 책임 원칙이 타입 당 하나의 메서드만 가져야하는 것이 아닌가 오해를 하고 있었다.

 

하지만 SRP는 메서드의 갯수로 확인하는 것이 아니었다. 말 그대로 하나의 책임만 가지고 있어야 하지만, 하나의 메서드를 가지고 있어야 하는 것은 아니었다.

예를 들어 Queue를 관리해주는 타입이 있고 그 안에 queue를 빼주고 더해주는 메서드가 있다고 생각해보자. 

이 메서드들은 전부 Queue를 관리해준다는 하나의 책임을 가지고 있다. 

 

그러므로 이 경우는 메서드가 여러 개이더라도 단일 책임 원칙을 위배한다고 볼 순 없다. 

 

다만 여기서 DB의 Queue를 가져오거나 하는 메서드가 있다면 Queue를 관리하는 책임에 벗어나고 있기 때문에 단일 책임 원칙을 위배한다고 볼 수 있다. 

 

# NumberFormatter

NumberFormatter.Style

.none 1235
.decimal 1,234.1324 (이 때 nan도 NaN으로 표기된다)
.percent 12%
.scientific 1.2345678E3
.spellOut one hundred twenty-three
.ordinal 3rd
.currency $1,234.43
.currencyAccounting ($1,234.43)
.currencyISOCode USD1,234.43
.currencyPlural 1,234.34 US dollars

.maximumFractionDigits: 소수점 얼마까지 표현할 것인지 작성

 

 

 

Comments