🔥 서브스크립트 문법

269자
4분

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 * 618을 반환하죠.

이렇게 Swift에서는 서브스크립트 문법을 통해 인스턴스를 배열이나 딕셔너리처럼 인덱스로 접근할 수 있어요. 읽기-쓰기 또는 읽기 전용으로 서브스크립트를 만들 수 있고, 계산 속성처럼 getter와 setter로 동작을 제어할 수 있답니다. 실제로 배열, 딕셔너리, 문자열 등 콜렉션 타입들도 내부적으로 서브스크립트를 활용하고 있죠. 여러분도 직접 정의한 타입에 서브스크립트 기능을 추가할 수 있으니 유용하게 활용해 보세요!