22. Subscript

4650 단어 swiftswift

* 정의

- 서브스크립트란 컬렉션 같은 집합의 특정요소에 접근하는 문법을 의미한다. 서브스크립트를 이용해 값에 접근하거나 값을 할당할 수 있고, 직접 구현하는 것도 가능하다.
먼저 클래스를 만들어보자
class List {
    var data = [1, 2, 3] 
    
    subscript(index: Int) -> Int { 
        get { 
            return data[index]  
        }
        set { 
            data[index] = newValue
        }
    }
}
* 현재 구현된 서브스크립트의 형태를 보면, 왠지 모르게 메소드 같기도 하고 계산프로퍼티 같기도 하다.
  subscript(index: Int) -> Int { 
      get { 
          return data[index]  
      }
      set { 
           data[index] = newValue
      }
  }    
* 형태에서 보여지는 것 처럼 실제로 메소드, 계산프로퍼티의 기능과 유사한 부분이 많다.
1. 먼저 메소드와 유사한 부분은 파라미터와 리턴형이 따라온다는 것이다. 심지어 가변파라미터를 사용하는 것도 가능하다. 그러나 입출력 파라미터나 기본값이 있는 파라미터를 사용하는 것은 불가능하다. 그리고 반드시 리턴형을 선언해야 한다.
2. 계산프로퍼티와 유사한 부분은 겟블록, 셋블록을 통해 값을 읽고 쓸 수 있다는 점이다. 서브스크립로 값을 저장했다면 그 값은 파라미터를 통해 셋블록으로 전달된다. 만약 파라미터이름을 생략한다면 newValue라는 이름의 상수가 자동으로 제공된다. 이러한 점 역시 계산프로퍼티와 유사하다.
var l = List()
l[0] 
* 이렇게 인스턴스를 생성하고 서브스크립트를 사용하면, get블록이 실행되며 첫번째 요소가 리턴된다.
l[1] = 123 
* 이렇게 새로운 값을 저장하면 set블록이 실행되어 두번째 요소가 업데이트 된다. 그러나 주의해야 할 점은 서브스크립트를 사용할 때 파라미터의 형식과 일치시켜야 한다는 것이다. 만약 일치하지 않거나 범위가 벗어난다면 에러가 발생한다.
1[0,1] // error 
1[6] // error

좋은 웹페이지 즐겨찾기