일반적으로 Swift에서 객체 구조는 아래와 같다.
Object = Data + Method
* Structure vs Class
Structure | Class |
Value Types | Reference Types |
Copy | Share |
Stack | Heap |
- Structure : 관계 있는 데이터를 모아서 표현할 때 사용
- Class : 데이터를 모아서 표현하되, 같은 데이터를 참조할 때 사용
왜 Structure 구조를 사용해야 할까?
위와 같이 첫번째 줄처럼 변수를 일렬로 나열하는 것보다, 두번째 줄처럼 사람이 이해하기 쉬운 구조로 나누어서 변수를 표현해주는 것이
가독성이 좋으며 협업이나 리펙토링 과정에서도 코드파악에 용이하다.
아래는 Structure(구조) 형식을 이용하여 "제일 가까운 위치의 배달 가능한 편의점 찾기" 문제 예시
import UIKit
// 문제 : 제일 가까운 위치의 배달 가능한 편의점을 구하라
// Given distance func
func distance(current: Location, target: Location) -> Double {
// 피타고라스..
let distanceX = Double(target.x - current.x)
let distanceY = Double(target.y - current.y)
let distance = sqrt(distanceX * distanceX + distanceY * distanceY)
return distance
}
struct Location {
let x: Int
let y: Int
}
struct Store {
let loc: Location
var name: String
let deliveryRange = 2.0 // 반경은 2M 이내
func isDeliverable(userLoc: Location) -> Bool {
let distanceToStore = distance(current: userLoc, target: loc)
return distanceToStore < deliveryRange
}
}
// Given stores
let store1 = Store(loc: Location(x: 3, y: 5), name: "gs")
let store2 = Store(loc: Location(x: 4, y: 6), name: "seven")
let store3 = Store(loc: Location(x: 1, y: 7), name: "cu")
// Given printClosestStore func
func printClosestStore(currentLocation: Location, stores: [Store]) {
var closestStoreName = ""
var closestStoreDistance = Double.infinity
var isDeliverable = false
for store in stores {
let distanceToStore = distance(current: currentLocation, target: store.loc)
closestStoreDistance = min(distanceToStore, closestStoreDistance)
if closestStoreDistance == distanceToStore {
closestStoreName = store.name
isDeliverable = store.isDeliverable(userLoc: currentLocation)
}
}
print("Closest store: \(closestStoreName) deliverable: \(isDeliverable)")
}
// Set stores and myLocation
let stores = [store1, store2, store3]
let myLocation = Location(x: 2, y: 5)
// Use printClosestStore func to print
printClosestStore(currentLocation: myLocation, stores: stores)
* Protocol
: 지켜야할 약속 (규약)
서비스를 이용할 해야할 일들을 의미
ex) 뮤직 앱 서비스 이용 시 해야할 일은?
회원가입 / 로그인 / 결제 등등..
'iOS' 카테고리의 다른 글
[15일차] Property vs Method (0) | 2020.08.04 |
---|---|
[14일차] Structure Property (구조 프로퍼티) 학습 (0) | 2020.07.31 |
[12일차] Set 과 Closure 이용 (0) | 2020.07.28 |
[11일차] Array 함수와 Dictionary 실습 (0) | 2020.07.27 |
[9일차] Optional 고급기능 (0) | 2020.07.25 |
댓글