Swift - 12. 서브 스크립트 Subscripts

지우개·2022년 3월 29일
0

Swift study

목록 보기
1/15
post-thumbnail

서브 스크립트란?
콜렉션, 목록, 시퀀스 등 집합의 특정 멤버 요소에 접근할 수 있는 단축키
추가적인 메소드 없이 특정 값을 할당하거나 가져올 수 있다.

예를 들어, 배열 인스턴스의 특정 엘리먼트는 someArray[index], 딕셔너리 인스턴스의 특정 엘리먼트는 someDictionary[key]로 접근한다.
하나의 타입에 여러 서브 스크립트는 정의할 수 있고 오버로드도 가능하다. 필요에 따라 복수 인자 값을 사용할 수도 있다.


서브 스크립트 문법 Subscript Syntax

인스턴스 메소드와 계산된 프로퍼티를 선언하는 것과 비슷하지만, 서브 스크립트는 읽고 쓰기(read-write) 혹은 읽기 전용(read only)만 가능하다. 정의는 계산된 프로퍼티 방식과 같이 getter, setter 방식을 따른다.
서브 스크립트를 사용해 인스턴스 이름 뒤 대괄호에 하나 이상의 값을 작성하여 타입의 인스턴스를 조회할 수 있다.

subscript(index: Int) -> Int {
    get {
        // 적절한 반환 값 Return an appropriate subscript value here.
    }
    set(newValue) {
        // 적절한 set 액션 Perform a suitable setting action here.
    }
}

set에 대한 인자 값을 지정하지 않으면 기본 값으로 newValue를 사용한다.
get, set을 지우고 지정하지 않으면 읽기 전용으로 선언된다.


서브 스크립트 사용 Subscript Usage

var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2

서브 스크립트 옵션 Subscript Options

서브 스크립트는 여러 개의 입력 파라미터를 가질 수 있고 어떤 타입이든지 입력과 반환이 가능하다.
서브 스크립트는 오버로딩을 허용한다. 그래서 인자형, 반환형에 따라 원하는 수 만큼의 서브 스크립트를 선언할 수 있다.


타입 서브 스크립트 Type Subscripts

인스턴스 서브 스크립트는 특정 타입의 인스턴스를 호출하는 서브 스크립트다.
타입 자체에서 호출되는 서브 스크립트도 정의할 수 있는데, 이런 종류의 서브 스크립트를 타입 서브 스크립트라고 한다.
subscript 키워드 전에 static 키워드를 작성하여 타입 서브 스크립트를 나타낸다.

enum Planet: Int {
    case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
    static subscript(n: Int) -> Planet {
        return Planet(rawValue: n)!
    }
}
let mars = Planet[4]
print(mars)

면접 질문

1. Subscripts에 대해 설명하시오.

콜렉션, 리스트, 시퀀스 등 집합의 특정 멤버 요소에 간단하게 접근할 수 있도록 하는 문법이다.
추가적인 메소드 없이 특정 값을 할당하거나 가져올 수 있다.
대괄호 []를 사용

2. String은 왜 subscript로 접근이 안되는지 설명하시오.

Swift에서 Character
String은 str[0]와 같이 Int로 접근하지 못하고, String.index로 접근해야한다 String는 characters의 모음, 즉 Array
스위프트에서 Character은 1개 이상의 유니코드 스칼라 Unicode Scalar 로 이루어져 있는데 크기가 가변적이다.


참고
https://jusung.gitbook.io/the-swift-language-guide/language-guide/12-subscripts#subscript-options!

0개의 댓글