서브스크립트(Subscripts)

썹스·2022년 10월 11일
0

Swift 문법

목록 보기
17/68

서브스크립트(Subscripts)

배열, 딕셔너리, 열거형 등에서는 대괄호[ ]를 사용하여 원하는 결과값을 얻을 수 있습니다.

이러한 대괄호를 사용하여 원하는 값을 반환하는 문법을 서브스크립트(Subscripts)라 부르며, 개발자가 많이 사용하는 배열, 딕셔너리, 열거형 같은 경우는 특별한 서브스크립트 구현 없이 바로 사용할 수 있습니다. (애플에서 Swift 언어를 만들 때 내부적으로 기능을 미리 구현)

하지만 특별한 기능 또는 인스턴스가 직접 접근하여 사용해야 할 때는 개발자가 서브스크립트를 구현하여 사용할 수 있습니다.


📌 서브스크립트의 getter/setter

서브스크립트는 get만을 사용하여 읽기 전용(read only)으로 사용 가능하며, get과 set을 둘 다 사용하여 읽고/쓰기(read/write)용으로도 사용 가능합니다.

서브스크립트의 get/set의 정의 방법은 계산 속성(Computed Properties)과 매우 유사합니다.

읽기(get) 전용으로 만든 서브스크립트

class Man{
    var classFriend = ["짱구", "철수", "훈이", "유리", "맹구"]

    subscript(index: Int) -> String{
            return classFriend[index]
    }
}


var kim = Man()
kim[2]    //훈이

읽기(get)/쓰기(set)용으로 만든 서브스크립트

class Man{
    var classFriend = ["짱구", "철수", "훈이", "유리", "맹구"]

    subscript(index: Int) -> String{
        get{
            return classFriend[index]
        }
        set{
            classFriend[index] = newValue
        }
    }
}


var kim = Man()
kim[2]    //훈이
kim[2] = "사토 마사오"
print(kim[2])   //사토 마사오

📌 타입 서브스크립트(Type Subscripts)

인스턴스가 아닌 클래스나 구조체, 열거형이 직접 접근하여 사용하는 서브스크립트입니다.

타입 서브스크립트 또한 get/set을 사용하여 "읽기 전용" 또는 "읽고/쓰기용"으로 만들 수 있습니다.

subscripts( ) 앞에 "static" 또는 "class" 키워드를 작성하여 사용합니다. (static으로 선언할 경우 상속 후 재정의가 불가능하다.)

enum Rainbow: Int{
    case red = 1, orange, yellow, green, blue, navy, purple
   
    static subscript(index: Int) -> Rainbow{
        get{
            return Rainbow(rawValue: index)!
        }
    }
}

var color = Rainbow[4]
print(color)   //green

📌 서브스크립트(Subscripts)의 정체

  • 서브스크립트를 정의하는 방법은 함수를 정의하는 방법과 매우 유사합니다. 그 이유는 서브스크립트가 함수이기 때문입니다.

  • 서브스크립트는 "func"키워드 대신 "Subscrips"키워드를 사용하며, 아규먼트 레이블(argument label)을 따로 사용하지 않는다는 특징을 가지고 있습니다.

  • 서브스크립트는 클래스 또는 구조체, 열거형에서 사용하는 함수이기 때문에 메서드의 한 종류입니다.



Reference

참고자료: 앨런 Swift문법 마스터 스쿨

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글