Swift/개념 & 응용

[Swift] isMultiple(of:) 소개

유정주 2022. 9. 8. 16:52
반응형

isMultiple(of:)

알고리즘을 풀다 isMultiple(of:)를 알게 되어 소개드리기 위해 포스팅을 작성합니다.

간단한 메서드지만 매우 편리하다고 느꼈거든요.

 

isMultiple(of:)는 배수인지 판단하는 메서드입니다.

두 정수 a와 b에 대하여, a = q*b인 세 번째 정수 q가 존재한다면, a는 b의 배수이다. 
예를 들어 6 = 2*3이므로 6은 3의 배수입니다.
0은 임의의 정수 x에 대해 0 = 0*x이므로 모든 것의 배수이다.

애플 공식 문서에 나와있는 isMultiple의 Declaration입니다.

메서드 정의를 통해 정수형만, 그중에서도 FixedWidthInteger 프로토콜을 준수한 정수형만 취급한다는 것을 알 수 있습니다.

 

예제 코드도 살펴봅시다.

let number = 6
if number.isMultiple(of: 3) {
    print("6 is Multiple 3")
}
//6 is Multiple 3

6이 3의 배수인지 체크하는 코드입니다.

 

isMultiple(of:)과 % 연산 차이

여기까지만 보면 isMultiple(of:)은 % 연산과 차이점이 없어보입니다.

위의 코드는 %를 이용해 아래처럼 작성할 수 있습니다.

let number = 6
if number % 3 == 0 {
    print("6 is Multiple 3")
}

 

 

isMultiple(of:)는 % 연산과 두 가지 차이가 있습니다.

 

첫 번째로, 0으로 나누는 상황에서 number % 0 == 0 은 무조건 True 입니다.

하지만 number.isMultiple(of: 0)은 number가 0이면 True, 아니라면 False 입니다.

print(0.isMultiple(of: 0)) //True
print(1.isMultiple(of: 0)) //False

 

이는 % 연산으로 배수 판단을 할 때 0을 예외처리 하던 불편함을 해소할 수 있다는 것을 의미합니다.

개인적으로 0 예외처리가 번거로웠기 때문에 isMultiple이 굉장히 편리하다고 느껴졌습니다.

 

두 번째는 오버플로우에 대한 표현이 차이가 납니다.

signed integer인 T에 대해 T.min.isMultiple(of: -1)은 True입니다.

하지만 T.min / -1은 오버플로우로 인해 컴파일 에러가 발생합니다.

컴파일러가 에러를 잡아주지만 사전에 에러 발생 가능성을 줄일 수 있습니다.

 

참고

https://developer.apple.com/documentation/swift/int/ismultiple(of:) 

https://developer.apple.com/documentation/swift/fixedwidthinteger


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형