본문 바로가기
Xcode/Swift - PlayGround

PlayGround) Subscript란?

by 후르륵짭짭 2022. 3. 15.
728x90
반응형

 

안녕하세요! 후르륵짭짭입니다.

새해의 봄이 시작했네요 ㅎㅎㅎㅎ

일년 동안 많은 일 들이 있었는데,

매년 매해 뿌듯한 일이 있어서 참 감사한 것 같습니다.

올해도 뿌듯한 일이 가득 할 수 있으면 좋겠습니다

그런데 뒹굴거리는 삶이 행복합니다 ㅎㅎㅎ

 

** Subscript **

Swift에서 Subscript를 직접 만들어서 사용할 일이 별로 없었습니다.

사실 거의 Method를 만들어서 사용하지요오.

let numbers : [Int] = [1,2,3,4]

1) numbers.element(at : 0) //해당 메소드는 존재하지 않습니다.

2) numbers[0]

위를 예를들자면 method를 사용해서 해당 index에 접근 할 수도 있지만 

Subscript를 사용하면 [index] 처럼 접근 할 수 있게 됩니다.

즉, Array나 Dictionary가 Subscript로 구성되어 있는 겁니다.

 

** 일반적인 Read 방식 ** 

class Test{
    var list : [String] = ["Hello", "World"]
    //1.
    subscript(index : Int) -> String {
        return list[index]
    }
    //2.
    subscript(index : Int , index2 : Int) -> String {
        return list[index] + " " + list[index2]
    }
    //3.
    subscript() -> String {
        return String(describing: list)
    }
    //4.
    subscript(one index : Int , two index2 : Int) -> String {
        return list[index] + " " + list[index2]
    }
}

let test = Test()
print(test[0])
print(test[0,1])
print(test[])
print(test[one : 0 , two : 1])

//결과 
Hello
Hello World
["Hello", "World"]
Hello World

1.  일반적인 하나 호출 subscript

2. N개의 호출 Subscript

3. 0개 호출 Subscript

4. Naming을 붙인 N개 호출 Subscript

 

**  값 Setting 방식 ** 

class Test2{
    var list : [String] = ["hello", "world"]
    
    1.
    subscript(index : Int) -> String{
        get{
            return list[index]
        }
        //setter는 반드시 getter도 필요하다.
        set{
            list[index] = newValue //newValue는 반드시 return값을 따른다.
        }
    }
}


let test2 = Test2()
print(test2[0])
test2[0] = test2[0].uppercased()
print(test2[0])

//결과
hello
HELLO

 

Setting은 반드시 Get이 있어야하고 Return이 존재 해야한다.

그리고 Setting에는 NewValue가 있는데 이 NewValue는 Return값과 동일시 하게 된다.

 

** Generic Subscript ** 

class Test3 {
    subscript<T : Equatable >(one : T , two : T) -> Bool {
        return one == two
    }
}

let test3 = Test3()

print(test3[1,1])
print(test3[1,2])

//결과 
true
false

이렇게 Generic Type 방식의 Subscript를 사용하면 

다양한 값에 대한 Subscript 대응을 만들 수 있게 된다.

 

** 결론 **

Subscript는 좋다!

그런데 단순한 값 접근에는 좋다.

어떤 복잡한 기능을 작용할 때는 가독성이 떨어지고 Method 처럼 함수 이름을 지정할 수 있는게 아니라

Custom Subscript를 만드는 것에 대해서는 신중하게 선택 하고 만드는게 좋을 것 같다.

 

** 참고 사이트 ** 

https://babbab2.tistory.com/123?category=828998 

 

Swift) 서브스크립트(Subscript) 정복하기

안녕하세요!?! 소들입니다!!!!!!!!! :D 오늘은 서브스크립트(Subscript)에 대해 알아볼 거예요!!! 이렇게 하나하나 Swift를 정복하다보면.. 언젠가 Swift 왕이 되어 있기를 간절히 바라며.....👑 이번에도

babbab2.tistory.com

https://www.swiftbysundell.com/articles/the-power-of-subscripts-in-swift/

 

The power of subscripts in Swift | Swift by Sundell

Using subscripting to access elements within various collections, like arrays and dictionaries, is something that’s very common not only in Swift — but in almost all relatively modern programming languages. However, the way subscripting is actually imp

www.swiftbysundell.com

 

728x90
반응형

댓글