🔥 서브스크립트 사용법

307자
4분

서브스크립트의 정확한 의미는 사용되는 맥락에 따라 달라져요. 보통 서브스크립트는 컬렉션, 리스트, 또는 시퀀스에서 요소에 접근하는 간편한 방법으로 사용됩니다. 여러분은 특정 클래스나 구조체의 기능에 가장 적합한 방식으로 서브스크립트를 구현할 수 있어요.

예를 들어, Swift의 Dictionary 타입은 Dictionary 인스턴스에 저장된 값을 설정하고 가져오기 위해 서브스크립트를 구현하고 있죠. 딕셔너리의 키 타입에 해당하는 키를 서브스크립트 대괄호 안에 제공하고, 딕셔너리의 값 타입에 해당하는 값을 서브스크립트에 할당하여 딕셔너리에 값을 설정할 수 있답니다.

var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
// numberOfLegs의 타입은 [String: Int]로 추론됩니다.
 
numberOfLegs["bird"] = 2
// 서브스크립트를 사용하여 딕셔너리에 새로운 키-값 쌍을 추가합니다.
swift

위 예제에서는 numberOfLegs라는 변수를 정의하고 세 개의 키-값 쌍을 포함하는 딕셔너리 리터럴로 초기화했어요. numberOfLegs 딕셔너리의 타입은 [String: Int]로 추론됩니다. 딕셔너리를 생성한 후, 이 예제는 서브스크립트 할당을 사용하여 "bird"라는 String 키와 2라는 Int 값을 딕셔너리에 추가하고 있죠.

서브스크립트를 사용한 딕셔너리 접근에 대한 더 자세한 정보는 Accessing and Modifying a Dictionary를 참고하세요.

Swift 표준 라이브러리의 컬렉션 타입 외에도 우리가 직접 정의한 타입에서 서브스크립트를 활용할 수 있어요. 예를 들어, 2차원 좌표를 표현하는 구조체에서 서브스크립트를 사용하여 x좌표와 y좌표를 설정하고 접근할 수 있겠죠.

struct Point {
    var x: Int = 0
    var y: Int = 0
 
    subscript(axis: String) -> Int {
        get {
            switch axis {
            case "x":
                return x
            case "y":
                return y
            default:
                return 0
            }
        }
        set {
            switch axis {
            case "x":
                x = newValue
            case "y":
                y = newValue
            default:
                break
            }
        }
    }
}
 
var point = Point()
point["x"] = 10
point["y"] = 20
print("Point: (\(point["x"]), \(point["y"]))")
// "Point: (10, 20)" 출력
swift

이렇게 구조체 Point에 서브스크립트를 정의하여 "x" 또는 "y"를 입력받아 해당 좌표 값을 설정하거나 반환할 수 있답니다. 서브스크립트의 getset에서 입력된 축 문자열에 따라 알맞은 속성 값을 처리해 주고 있어요.

이처럼 꼭 컬렉션 타입이 아니더라도 인덱스나 키를 사용해 값에 접근하는 것이 자연스러운 타입이라면 서브스크립트를 적극 활용해 보는 것이 좋겠죠? 코드의 가독성도 높이고 사용의 편의성도 향상시킬 수 있습니다.