🔥 서브스크립트 문법
Swift에서는 서브스크립트 문법을 통해 타입의 인스턴스를 인덱스로 접근할 수 있어요. 서브스크립트를 정의하는 방법은 인스턴스 메서드나 계산 속성을 정의하는 것과 비슷하답니다. subscript
키워드를 사용하고, 인스턴스 메서드처럼 입력 매개변수와 반환 타입을 지정하면 돼요. 다만 인스턴스 메서드와 다르게 서브스크립트는 읽기-쓰기 또는 읽기 전용으로 만들 수 있죠. 이는 계산 속성처럼 getter와 setter를 통해 제어할 수 있습니다.
subscript(index: Int) -> Int { get { // 적절한 서브스크립트 값을 반환합니다. } set(newValue) { // 적절한 설정 작업을 수행합니다. } }
swift
newValue
의 타입은 서브스크립트의 반환 타입과 동일해요. 계산 속성에서처럼 setter의 (newValue)
매개변수를 직접 지정하지 않으면, 기본 매개변수 이름인 newValue
가 제공됩니다.
읽기 전용 계산 속성처럼, 읽기 전용 서브스크립트도 get
키워드와 중괄호를 생략하여 선언할 수 있어요.
subscript(index: Int) -> Int { // 적절한 서브스크립트 값을 반환합니다. }
swift
다음은 읽기 전용 서브스크립트를 구현한 예시예요. 정수의 n배수 테이블을 나타내는 TimesTable
구조체를 정의합니다.
struct TimesTable { let multiplier: Int subscript(index: Int) -> Int { return multiplier * index } } let threeTimesTable = TimesTable(multiplier: 3) print("six times three is \(threeTimesTable[6])") // "six times three is 18"을 출력합니다.
swift
이 예시에서는 3배수 테이블을 나타내기 위해 TimesTable
의 새 인스턴스를 생성했어요. 이는 구조체의 이니셜라이저에 3
을 전달하여 인스턴스의 multiplier
매개변수 값으로 사용하도록 지정한 거예요.
threeTimesTable[6]
호출에서 보듯이 threeTimesTable
인스턴스의 서브스크립트를 호출하여 쿼리할 수 있답니다. 이는 3배수 테이블의 6번째 항목을 요청하는 것으로, 3 * 6
즉 18
을 반환하죠.
이렇게 Swift에서는 서브스크립트 문법을 통해 인스턴스를 배열이나 딕셔너리처럼 인덱스로 접근할 수 있어요. 읽기-쓰기 또는 읽기 전용으로 서브스크립트를 만들 수 있고, 계산 속성처럼 getter와 setter로 동작을 제어할 수 있답니다. 실제로 배열, 딕셔너리, 문자열 등 콜렉션 타입들도 내부적으로 서브스크립트를 활용하고 있죠. 여러분도 직접 정의한 타입에 서브스크립트 기능을 추가할 수 있으니 유용하게 활용해 보세요!