🔥 Extension으로 서브스크립트 추가하기
Extension을 사용하면 기존 타입에 새로운 서브스크립트를 추가할 수 있습니다. 이 예제는 Swift의 내장 타입인 Int
에 정수 서브스크립트를 추가합니다. 이 서브스크립트 [n]
은 오른쪽에서부터 n
번째 자리에 있는 10진수를 반환합니다:
123456789[0]
은9
를 반환합니다.123456789[1]
은8
을 반환합니다.
이런 식으로 계속됩니다:
extension Int { subscript(digitIndex: Int) -> Int { var decimalBase = 1 for _ in 0..<digitIndex { decimalBase *= 10 // 10의 거듭제곱을 계산 } return (self / decimalBase) % 10 // 해당 자리의 숫자를 반환 } } 746381295[0] // 5를 반환합니다. 746381295[1] // 9를 반환합니다. 746381295[2] // 2를 반환합니다. 746381295[8] // 7을 반환합니다.
swift
이 서브스크립트 구현에서는 먼저 decimalBase
라는 변수를 1로 초기화합니다. 그런 다음 digitIndex
만큼 반복하면서 decimalBase
를 10씩 곱합니다. 이렇게 하면 digitIndex
에 해당하는 10의 거듭제곱을 얻을 수 있죠.
예를 들어 digitIndex
가 2이면 decimalBase
는 100이 됩니다. 이는 오른쪽에서 세 번째 자리의 숫자를 얻기 위해 필요한 값이죠.
그 다음, 전체 숫자를 decimalBase
로 나눈 몫을 10으로 나눈 나머지를 반환합니다. 이렇게 하면 해당 자리의 숫자를 얻을 수 있습니다.
만약 요청된 인덱스에 대해 Int
값의 자릿수가 충분하지 않으면, 서브스크립트 구현은 마치 숫자가 왼쪽에 0으로 채워진 것처럼 0
을 반환합니다:
746381295[9] // 0을 반환합니다. 마치 다음과 같이 요청한 것과 같죠: 0746381295[9]
swift
이 예제는 서브스크립트의 강력함을 잘 보여줍니다. 우리는 단순히 []
문법을 사용하여 숫자의 특정 자릿수에 접근할 수 있게 되었죠. 이는 코드의 가독성과 표현력을 크게 향상시킵니다.
또한 이 예제는 Extension이 기존 타입에 새로운 기능을 추가하는 데 얼마나 유용한지를 보여줍니다. 우리는 Int
타입 자체를 수정하지 않고도 새로운 서브스크립트를 추가할 수 있었죠.
이처럼 Extension과 서브스크립트를 함께 사용하면 타입의 기능을 매우 유연하고 직관적인 방식으로 확장할 수 있습니다. 이는 코드의 가독성과 사용성을 향상시키는 강력한 도구입니다.
서브스크립트의 동작을 시각화하기 위해 다음과 같은 다이어그램을 그려볼 수 있습니다:
이 다이어그램은 서브스크립트를 통해 숫자의 각 자리에 어떻게 접근하는지를 명확하게 보여줍니다. Extension과 서브스크립트의 조합은 정말 강력하고 표현력 있는 코드를 작성할 수 있게 해주는 도구라 할 수 있겠네요!