안녕하세요~! 오늘은 isMultiple(of:)에 대해서 소개해 드리겠습니다.
isMultiple(of:)는 배수인지 판단하는 메서드입니다.
여기서 배수는 어떤 정수와 다른 정수를 곱했을 때 나오는 수입니다.
예를 들어 6 = 2 * 3이므로 6은 3의 배수입니다.
아래 코드 처럼 이전에는 % 연산자를 사용해서 배수를 판단하는 코드를 작성했었죠
그렇다면 isMultiple(of:)와 어떤 문제를 해결 할 수 있길래 애플에서 공식적으로 제공하고 있을까요?
let number = 6
if number % 3 == 0 {
print("6은 3의배수")
}
첫 번째로, 0으로 나누는 상황을 볼 수 있는데요. number % 0 == 0 은 무조건 참 입니다.
number.isMultiple(of: 0)은 number가 0이면 참, 아니라면 거짓입니다.
0.isMultiple(of: 0) // true
1.isMultiple(of: 0) // false
% 연산자로 배수 판단을 할 때, 0을 예외처리 하던 불편함을 해소할 수 있습니다.
두번째로 오버플로우에 대한 문제 인데요.
여기서 오버플로우는 '강물이 범람하다' 또는 '물이 흘러 넘치다' 라는 사전적 정의를 갖고 있습니다.
컴퓨터에서는 정수 연산의 계산 결과가 허용 범위를 초과할 때 발생하는 오류 입니다.
예를 들어 컴퓨터의 메모리가 8비트의 데이터를 저장할 수 있다고 가정 했을때
2의 8승 즉 256까지 숫자를 표현할 수 있습니다.
이 이상의 숫자를 표현하게 되면 오버플로우가 발생했다 라고 표현합니다.
다시 본론으로 들어가 보겠습니다.
Int.min.isMultiple(of: -1)은 True입니다.
하지만 Int.min / -1은 오버플로우로 인해 컴파일 에러가 발생합니다.
컴파일러가 에러를 잡아주지만 사전에 에러 발생 가능성을 줄일 수 있습니다.
print(Int.min) // -9223372036854775808
print(Int.max) // 9223372036854775807
Int.min.isMultiple(of: -1)
Int.min / -1 // Division '-9223372036854775808 / -1' results in an overflow
아래 예제 코드와 같이 배수를 판단해서 위에서 언급한 2가지 이슈들에 대해 대응이 가능합니다.
let number = 6
if number.isMultiple(of: 3) {
print("6은 3의 배수")
}
오늘은 여기까지 입니다. 감사합니다~!!
참조:
'Apple > Apple_Swift' 카테고리의 다른 글
Swift5.1 불투명 타입 (Opaque type) some Type SE-0244 (0) | 2023.01.20 |
---|---|
Swift5.1 구조체 멤버별 이니셜라이저(Memberwise Initializer)의 기본값 합성 SE-0242 (0) | 2023.01.16 |
Swift5.0 중첩된 Optionals(??) 평면화 하기 SE-0230 (0) | 2023.01.10 |
Swift5.0 향후 변경 될 수 있는 Enum(열거형) switch @unknown 속성 처리 SE-0192 (0) | 2023.01.03 |
Swift 5.0 Result Type 소개 (에러 처리를 쉽고 깔끔하게 결과는 명확하게 SE-0235) (0) | 2022.12.27 |