TIL: 멤버의 확장(서브스크립트)

Royce·2025년 3월 24일

Swift 문법

목록 보기
44/63

멤버의 확장(서브스크립트)

  • 확장을 사용하여 기존 타입에 새로운 서브스크립트를 추가할 수 있다
  • 기존 타입의 동작을 변경하지 않고도 추가 기능을 제공할 수 있다

서브스크립트 확장의 예시

// Int 타입에 서브스크립트를 추가하여 특정 자리의 숫자를 반환하도록 확장하기
extension Int {

    /// 특정 자리수의 십진수 값을 반환하는 서브스크립트
    /// - Parameter index: 검색할 자리수 (0 = 일의 자리, 1 = 십의 자리, 2 = 백의 자리, ...)
    subscript(index: Int) -> Int {
        
        // 자리수에 해당하는 10의 거듭제곱 값 계산
        var divisor = 1
        for _ in 0..<index {
            divisor *= 10
        }
        
        // 자리수의 값을 추출하여 반환 (범위를 넘으면 0 반환)
        return (self / divisor) % 10
    }
}

// 사용 예시
let number = 987654321

print(number[0])  // 1 (일의 자리)
print(number[1])  // 2 (십의 자리)
print(number[2])  // 3 (백의 자리)
print(number[3])  // 4 (천의 자리)
print(number[4])  // 5 (만의 자리)
print(number[5])  // 6 (십만의 자리)
print(number[6])  // 7 (백만의 자리)
print(number[7])  // 8 (천만의 자리)
print(number[8])  // 9 (억의 자리)

// 범위를 넘는 경우
print(number[9])  // 0 (존재하지 않는 자리)
print(number[12]) // 0 (존재하지 않는 자리)
  • extension Int: 기존 Int 타입을 확장하고 있다
  • subscript(index: Int) ➡️ Int: 인덱스를 입력받아 특정 자리수의 값을 반환하는 서브스크립트를 정의하였다
  • divisor: 주어진 인덱스에 맞게 10의 거듭제곱 값을 계산한다 (index0이면 1, 1이면 10, 2이면 100 등)
  • (self / divisor) % 10: 숫자를 자리수에 따라 나누고, 10으로 나누었을 때의 나머지를 계산하여 해당 자리수를 반환한다
  • 범위를 넘는 경우 0을 반환한다
profile
iOS 개발자 지망생

0개의 댓글