본문 바로가기
공부/스위프트

[스위프트] Some

by 초코팅촉 2024. 2. 9.
728x90

이번에는 Some에 대해서 알아봅시다!

 

some은 Swift 5.1에서 등장한 키워드로

연산프로퍼티인 body안에 불투명한 타입이 있음을 나타낸다고 합니다.

 

그럼 우선 불투명한 타입이 뭔지 알아야겠죠?

 

불투명한 타입

불투명한 타입이란 말그대로 뭐가 반환될지 모르는 타입을 의미합니다. 다음 예시를 볼까요

protocol Car {
    func showSpeed() -> String
}

struct Morning: Car {
    func showSpeed() -> String {
        return "Avg Speed is 60km"
    }
}

struct Ferrari: Car {
    func showSpeed() -> String {
        return "Avg Speed is 150km"
    }
}

위처럼 Car프로토콜을 따르는 구조체 Morning과 Ferrari가 있다고 합시다.

 

그리고 아래같은 메서드가 있다고 합시다.

func showYourSpeed -> Car {
	return Morning()
}

이경우엔 어떤 구조체가 나올지 모르겠죠?

이런 showYourSpeed같은 메서드를 불투명한 타입이라고 합니다.

 

하지만 우리의 Swift. 불안정성을 절대 용납하지 않죠?

그.래.서.

원래라면 불투명한 타입을 리턴하지 못하게 막습니다.

하지만 언어가 발달하며, 여러가지가 생기다보니(SwiftUI만 봐도) 허용해줘야하는 경우가 생기겠죠?

그럴때 some 키워드가 필요한겁니다.

 

Some

제네릭타입과 비슷하지만 전혀 다른 느낌의 친구입니다.

제네릭은 뭘 받냐에따라서 리턴값이 확실히 정해져있죠?

하지만 some은 아닙니다.

SwiftUI를 공부해보셨다면 이런 소스코드를 많이 보셨을겁니다.

struct ContentView: View {

    var body: some View {
    
        VStack(alignment: .center) {
        	Text("Hello, World!")
        }
    }
}

일단 SwiftUI를 모르시더라도 대충 "아, Hello, World! 소스구나~"라는건 아실겁니다.

 

하지만 우리가 봐야할 부분만큼은 일부러 띄워서 썼는데요,

3번째 줄에 보시면 var body: some View 하고 연산프로퍼티로 선언했죠?

 

그렇습니다. SwiftUI에서 body가 있는데 이 친구는 연산프로퍼티이고 View를 반환하는 변수입니다.

안에 Text부터 시작해서 Grid나 HStack 등등 많은 View 친구들이 들어가는 변수죠.

 

그럼 저 body는 딱 정해진게 없는 그냥 다양한 종류의 View를 반환하는 소스겠죠?

제대로 보신게 맞습니다! 이런경우 불투명한 타입을 반환하기때문에 앞에 some을 붙여준겁니다.

만약 some이 없었다면 항상 명확하게 표현했어야하니 매우 불편했겠죠?

 

이제 some이 무엇인지, 왜 some이 필요한지를 아셨을겁니다.